我有以下批处理文件:
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!
)