iT邦幫忙

0

Batch檔For迴圈擷取文字內容比對,Set變數成功但echo變數卻是空白

  • 分享至 

  • xImage

我需要自動化去判斷一個安裝的Log紀錄檔如下:

安裝資訊 
-------------------------
**開始安裝驅動
Intel Chipset Driver,10.1.18634.8254,10.1.18634.8254
Realtek Audio Driver,6.0.9175.1,6.0.9175.1
Intel LAN Driver,12.18.11.1,12.18.11.1
**結束安裝 

目前程式迴圈有成功得到變數且Set變數:安裝名稱(A)、要安裝版本(B)、完成安裝版本(C),但是嘗試echo和判斷比對卻帶不出設定,嘗試過setlocal enabledelayedexpansion一樣無效,一直找不出頭緒卡關...

程式:

@echo on
For /F "skip=3 tokens=1,2,3 delims=," %%I in (.\Install.log) do (
	Set A=%%I
	Set B=%%J
	Set C=%%K 
	echo.%A%
	echo.%B%
	echo.%C%
	if "%B%"=="%C%" (
	  echo.OK
	) else ( 
	  echo."%A%"_"%B%"_"%C%" Fail
 )
)

懇請點出我的問題在哪,非常感謝!!!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
wrxue
iT邦好手 1 級 ‧ 2021-09-07 10:48:22
最佳解答

延遲展開的變數要用 !{變數名稱}! 去存取

@echo on
setlocal EnableDelayedExpansion
For /F "skip=3 tokens=1,2,3 delims=," %%I in (.\Install.log) do (
	Set A=%%I
	Set B=%%J
	Set C=%%K
	echo.!A!
	echo.!B!
	echo.!C!
	if "!B!"=="!C!" (
	  echo.OK
	) else ( 
	  echo."!A!"_"!B!"_"!C!" Fail
 )
)

然後原始碼的 C=%%K 後面有空白鍵,要將其拿掉,否則 "!B!"=="!C!" 比出來的結果應該不會是預期的結果

結果

Intel Chipset Driver
10.1.18634.8254
10.1.18634.8254
OK

Realtek Audio Driver
6.0.9175.1
6.0.9175.1
OK

Intel LAN Driver
12.18.11.1
12.18.11.1
OK
johnnyis iT邦新手 5 級 ‧ 2021-09-07 11:00:12 檢舉

我有這樣改過,但是echo那還是顯示!A!,而非我Set的變數。
所以我才覺得沒有成功...
https://ithelp.ithome.com.tw/upload/images/20210907/20141598FVI2zAM2Aa.png

另外空白的部分感謝提醒,我真的疏忽了,謝謝!

wrxue iT邦好手 1 級 ‧ 2021-09-07 11:02:56 檢舉

這段文字是顯示出來給您看您的原始碼是甚麼,跟在原始碼後的執行結果 (ECHO 出來的) 是該段程式碼執行後的輸出喔。建議把 @echo on 改為 @echo off,這樣可以不要看到原始碼,只看輸出結果,不要因此困擾自己。
如果這個答案有協助您解決問題,歡迎選出最佳解答結束此問題~

johnnyis iT邦新手 5 級 ‧ 2021-09-07 11:10:30 檢舉

了解,我是先echo on看流程有沒有問題,我以為那會跟著改所以一直覺得沒有成功套用卡住了,非常感謝您的幫忙!!!/images/emoticon/emoticon12.gif

我要發表回答

立即登入回答