為什麼 Windows 會將運算子「=

為什麼 Windows 會將運算子「=

我有以下批次檔:

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。我懷疑這是由於“損壞”語法造成的。

然而,正如@Joey指出,這種行為與延遲擴張

為了使上面的程式碼工作,應該將其重寫為:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET TEST=Fail
ECHO Pass>foo.txt

IF ERRORLEVEL 0 (
SET /P TEST=<foo.txt
ECHO !TEST!
)

相關內容