为什么 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!
)

相关内容