set a=file
if exist "folder\%a%" (
set /p x= < "folder\%a%"
echo %x%
)
我已经写了很长时间的批处理文件,但我不明白为什么 这段代码不起作用。我期待代码回应出来的内容 %一个%。但它返回的只是ECHO的状态( Echo is ON )
%a%(文件)包含一个字符串('keyword'),该字符串应该在何时被回显 在%x%中设置
我甚至试图放一个扩展名(.txt),但它仍无法正常工作
答案 0 :(得分:2)
它不起作用,因为在执行“set / p”之前评估完整的括号块(以及echo%x%),你可以改为延迟扩展。
SETLOCAL EnableDelayedExpansion
set a=file
if exist "folder\%a%" (
set /p x= < "folder\%a%"
echo !x!
)
<强> [编辑] 强>
此代码还接受文件名
中的感叹号set "a=folder\foo!bar.txt"
SETLOCAL EnableDelayedExpansion
if exist "!a!" (
set /p x= < "!a!"
echo !x!
)
答案 1 :(得分:1)
if exist "folder\%a%" (
set /p x=< "folder\%a%"
SETLOCAL ENABLEDELAYEDEXPANSION&echo !x!&ENDLOCAL
)
这与jeb的代码基本相同,但ENABLEDELAYEDEXPANSION不会影响路径,所以文件名用!仍然可以工作(%可能不起作用,但这是批处理文件和文件名的一般问题)
set /p x= < .\somefile
有点像黑客,你可能想考虑使用FOR /F "tokens=*" %%A
...但是FOR会读取每一行,除非你把一个if放在DO里面。所以如果你只想要第一行,你最终会得到像这样丑陋的东西:
set eof=0
for /F "tokens=*" %%A IN ('type "folder\%a%" 2^>nul') DO (
SETLOCAL ENABLEDELAYEDEXPANSION&(if "!eof!"=="0" (echo.%%A))&ENDLOCAL
set eof=1
)