变量在 For 循环中不回显
Variable not Echoing in For Loop
我正在尝试使用文件夹中的批处理文件获取文件名,但它不起作用。
我遵循了 here 的指导方针,但由于某种原因,它根本没有返回任何应该返回的东西!
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Desktop\UPD\*.txt') DO SET result=%%G
我也试过:
FOR /F "tokens=*" %%G IN (dir /b C:\Users\Desktop\UPD\*.txt') DO SET _result=%%~G
echo %_result% >> %~dp0Outputfile.txt
我得到的是:
ECHO is on.
编辑
这是我目前所做的:
IF EXIST C:\Users\Nathanael\Desktop\UPD\*.txt (
echo file found >> %~dp0Outputfile.txt
chDIR C:\Users\Nathanael\Desktop\UPD\
dir *.txt /b >> %~dp0Outputfile.txt
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Nathanael\Desktop\UPD\*.txt') DO SET result=%%G
echo %result% >> %~dp0Outputfile.txt
)
输出为:
file found
NewVHD.txt
random.txt
ECHO is on.
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Desktop\UPD*.txt') DO SET result=%%G
确保路径正确(例如,也许应该是 c:\Users\YourName\Desktop\UPD*.txt
其中 YourName
是用户名)?
- 如果
for /f
returns多个文件最后一个会覆盖set
中的前一个
- cmd.exe 解析(代码块)的方式需要延迟扩展,当在同一代码块中设置和使用 var 时,就像您的
if exist
所以要么避免使用反向逻辑的代码块
IF NOT EXIST "C:\Users\Nathanael\Desktop\UPD\*.txt" Goto :Eof or other label
或者(始终缩进代码块以更好地跟踪):
Setlocal EnableDelayedExpansion
IF EXIST "C:\Users\Nathanael\Desktop\UPD\*.txt" (
echo file found >> %~dp0Outputfile.txt
chDIR "C:\Users\Nathanael\Desktop\UPD\"
dir "*.txt" /b >> %~dp0Outputfile.txt
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Nathanael\Desktop\UPD\*.txt') DO SET result=%%G
echo(!result! >> %~dp0Outputfile.txt
)
- 总是用双引号将路径括起来是个好习惯
- 为了避免
echo is off
消息使用其他命令分隔符而不是 space 如果 var 可能为空(我在这里使用 (
我正在尝试使用文件夹中的批处理文件获取文件名,但它不起作用。
我遵循了 here 的指导方针,但由于某种原因,它根本没有返回任何应该返回的东西!
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Desktop\UPD\*.txt') DO SET result=%%G
我也试过:
FOR /F "tokens=*" %%G IN (dir /b C:\Users\Desktop\UPD\*.txt') DO SET _result=%%~G
echo %_result% >> %~dp0Outputfile.txt
我得到的是:
ECHO is on.
编辑
这是我目前所做的:
IF EXIST C:\Users\Nathanael\Desktop\UPD\*.txt (
echo file found >> %~dp0Outputfile.txt
chDIR C:\Users\Nathanael\Desktop\UPD\
dir *.txt /b >> %~dp0Outputfile.txt
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Nathanael\Desktop\UPD\*.txt') DO SET result=%%G
echo %result% >> %~dp0Outputfile.txt
)
输出为:
file found
NewVHD.txt
random.txt
ECHO is on.
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Desktop\UPD*.txt') DO SET result=%%G
确保路径正确(例如,也许应该是 c:\Users\YourName\Desktop\UPD*.txt
其中 YourName
是用户名)?
- 如果
for /f
returns多个文件最后一个会覆盖set
中的前一个
- cmd.exe 解析(代码块)的方式需要延迟扩展,当在同一代码块中设置和使用 var 时,就像您的
if exist
所以要么避免使用反向逻辑的代码块
IF NOT EXIST "C:\Users\Nathanael\Desktop\UPD\*.txt" Goto :Eof or other label
或者(始终缩进代码块以更好地跟踪):
Setlocal EnableDelayedExpansion
IF EXIST "C:\Users\Nathanael\Desktop\UPD\*.txt" (
echo file found >> %~dp0Outputfile.txt
chDIR "C:\Users\Nathanael\Desktop\UPD\"
dir "*.txt" /b >> %~dp0Outputfile.txt
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Nathanael\Desktop\UPD\*.txt') DO SET result=%%G
echo(!result! >> %~dp0Outputfile.txt
)
- 总是用双引号将路径括起来是个好习惯
- 为了避免
echo is off
消息使用其他命令分隔符而不是 space 如果 var 可能为空(我在这里使用(