我正在嘗試使用批處理檔案從檔案(我們將其稱為MyFile.dart )中恢復特定資料。
更準確地說,我正試圖從這一行恢復 2.4:
static var version = 2.4;
首先,我使用 for 回圈遍歷檔案的每一行:
FOR /F "tokens=*" %%i IN (MyFile.dart)
然后我想檢查該行是否包含一個特定的字串(這里是“var version”)
set str = %%i
if not %str:"var version"=% == %str% DO
我從這個主題得到了這個,但在這里我得到了錯誤:
=str is unexpected
由于檢查不起作用,我對其進行評論,并在MyFile.dart的每一行上嘗試我的下一個 for 回圈(如果檢查有效,它只會在包含“var version”的行上):
set str = %%i
FOR /F "tokens=2 delims==" %%a IN (%str%) DO (
@echo %%a
)
在這里,我應該使用“=”作為分隔符來拆分行并顯示拆分陣列的第二個元素,但是在控制臺中沒有列印任何內容,當我注釋掉 @echo 時,我看到 %str% 是空值。我嘗試直接使用 %%i ,但也出現錯誤。
所以我硬編碼了我對回圈感興趣的行:
set str = %%i
FOR /F "tokens=2 delims==" %%a IN ("static var version = 2.4;") DO (
@echo %%a
)
并得到了2.4的預期結果;在控制臺中(但顯然這不是我想要的方式)。
所以總結一下:
第一個問題:檢查行是否包含特定子字串的“如果不是”不起作用。
第二個問題:我不能將變數從第一個回圈(檔案的一行)傳遞到第二個回圈然后決議它。
這是我的整個代碼:
FOR /F "tokens=*" %%i IN (MyFile.dart) DO (
set str = %%i
if not %str:"var version"=% == %str% DO (
FOR /F "tokens=2 delims==" %%a IN (%str%) DO (
@echo %%a
)
)
)
注意:如果您有完全不同的演算法來獲得相同的結果,我會接受!
uj5u.com熱心網友回復:
set str = %%i
這將變數“str Space”設定為值“ Space(的值%%i)”
使用語法
set "str=%%i"
包括引號。用于set "var1=value"設定STRING值 - 這可以避免尾隨空格引起的問題。設定算術值不需要引號(set /a`)
if not %str:"var version"=% == %str% DO (
正確的語法是
if not "%str:var version=%" == "%str%" (
或更好
if "%str:var version=%" neq "%str%" (
比較是字面的 - 必須參考比較運算子的兩側,因為該值可能包含空格等分隔符。
字串替換的正確語法是 %varname:string=substitutestring%
為什么又定str了?
=要使用分隔符決議字串,請使用
FOR /F "tokens=2 delims==" %%a IN ("string") DO (
但是請注意,這%str%將是遇到外回圈 ( ) 時str的值。有關其作業原理的說明,請參閱Stephan 的 DELAYEDEXPANSION 鏈接%%i
你應該考慮使用
FOR /F "tokens=2 delims==" %%a IN ("%%i") DO (
這對我有用 - 我更改了檔案的名稱
@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=*" %%i IN (q71930885.txt) DO (
set "str=%%i"
if "!str:var version=!" neq "!str!" (
FOR /F "tokens=2 delims==" %%a IN ("%%i") DO ( @echo %%a )
)
)
GOTO :EOF
回復:
Space2.4;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460388.html
