变量不在For循环中回响

时间:2018-05-13 02:54:30

标签: batch-file variables for-loop echo

我正在尝试使用文件夹中的批处理文件来获取文件名,但它不起作用。

我遵循了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.

2 个答案:

答案 0 :(得分:0)

FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Desktop\UPD*.txt') DO SET result=%%G

确保路径正确(例如,它可能是c:\Users\YourName\Desktop\UPD*.txt,其中YourName是用户名)?

答案 1 :(得分:0)

  • 如果for /f返回多个文件,则最后一个文件将覆盖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消息使用其他命令分隔符而不是空格如果var可能为空(我在这里使用了(