我有以下批次檔:
SET /P FOO=<"foo.txt"
這是嘗試將 的內容讀foo.txt
入變量FOO
,如中所建議的如何將文件內容讀入批次檔中的變數?
。這個方法以前對我來說效果很好。
當我執行腳本時,我得到以下輸出:
SET /P FOO= 0<"foo.txt"
這不僅是顯示錯誤,而且該值未讀入變數。為什麼會出現這種情況?我該如何解決這個問題?
我在多台機器上看到了這一點,EOL 或編碼問題似乎不是根源。
答案1
你確定它不起作用嗎?我嘗試複製這個問題,這就是我得到的結果:
D:\>notepad test.bat //i've put SET /P FOO=<"foo.txt" inside it
D:\>echo asdf > foo.txt
D:\>test.bat
D:\>SET /P FOO= 0<"foo.txt"
D:\>echo %FOO%
asdf
D:\>
所以它添加了0<
,但它仍然將文件內部的數據應用到變數。
答案2
回答最初的問題,如@grawity指出,=<
只是 的縮寫形式= <0
,這是完美的語法並且實際上按預期工作(一旦您測試它正確地)。
因此,輸出沒有任何問題,當我調查另一個問題時,這只是轉移注意力。
該問題與一段程式碼有關,類似:
@ECHO OFF
SETLOCAL
SET TEST=Fail
ECHO Pass>foo.txt
IF ERRORLEVEL 0 (
SET /P TEST=<foo.txt
ECHO %TEST%
)
運行此程式時,我預計輸出為Pass
,因為應該從 中讀取foo.txt
,但輸出為Fail
。我懷疑這是由於“損壞”語法造成的。
為了使上面的程式碼工作,應該將其重寫為:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET TEST=Fail
ECHO Pass>foo.txt
IF ERRORLEVEL 0 (
SET /P TEST=<foo.txt
ECHO !TEST!
)