变量在 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 /freturns多个文件最后一个会覆盖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 可能为空(我在这里使用 (