File 批输入重定向运算符 set a=文件 如果存在“文件夹\%a%” 设置/px=

File 批输入重定向运算符 set a=文件 如果存在“文件夹\%a%” 设置/px=,file,batch-file,command,redirect,echo,File,Batch File,Command,Redirect,Echo,我写批处理文件已经很长时间了,但我不明白为什么 此代码不起作用。我希望代码能反映出文件的内容 %a%。但它返回的只是ECHO的状态(ECHO处于打开状态) %a%(文件)包含一个字符串(“关键字”),当 设置为%x% 我甚至尝试放置一个扩展(.txt),但它仍然不起作用。它不起作用,因为在执行“set/p”之前对完整的括号块(以及echo%x%)进行了计算,所以您可以更改为延迟扩展 set a=file if exist "folder\%a%" ( set /p x= < "fold

我写批处理文件已经很长时间了,但我不明白为什么 此代码不起作用。我希望代码能反映出文件的内容 %a%。但它返回的只是ECHO的状态(ECHO处于打开状态)

%a%(文件)包含一个字符串(“关键字”),当 设置为%x%


我甚至尝试放置一个扩展(.txt),但它仍然不起作用。它不起作用,因为在执行“set/p”之前对完整的括号块(以及echo%x%)进行了计算,所以您可以更改为延迟扩展

set a=file
if exist "folder\%a%" ( 
 set /p x= < "folder\%a%" 
 echo %x% 
)
SETLOCAL EnableDelayedExpansion
设置一个=文件
如果存在“文件夹\%a%”
设置/px=<“文件夹\%a%”
回声!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
如果存在“!a!”(
设置/px=<“!a!”
回声!x!
)

请问延迟扩展是什么意思?如果%a%包含!(例如“foo!bar.txt”),然后在执行行或块的任何命令之前,代码在读取时中断%var%扩展了行或括号块。必须启用延迟扩展,然后它将扩展!瓦尔!与%var%类似,但在执行行或块的每个命令之前,也可以使用“set/?”解释it@Anders:我更改了代码,因此如果%a%包含感叹号,它也可以工作。很抱歉让您解释,键入set/后有点困惑?这就是为什么我问你们:P.thanksA循环可以用一个goto:label来打破
set "a=folder\foo!bar.txt"
SETLOCAL EnableDelayedExpansion
if exist "!a!" (
  set /p x= < "!a!"
  echo !x!
)
if exist "folder\%a%" ( 
 set /p x=< "folder\%a%"
 SETLOCAL ENABLEDELAYEDEXPANSION&echo !x!&ENDLOCAL
)
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
)