在批处理脚本中使用文本文件中的数据

时间:2012-04-13 15:06:11

标签: windows batch-file dos

批量内容:

FOR /F "tokens=1,*" %%i IN (list.txt) DO (
    cd "%%j"
    Echo %CD%
    pause
)

执行运行:

C:\Dwn>tmp1.bat

C:\Dwn>FOR /F "tokens=1,*" %i IN (list.txt) DO (
cd "%j"
 Echo C:\Dwn
 pause
)

C:\Dwn>(
cd "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Administrative Tools"
 Echo C:\Dwn
 pause
)
The system cannot find the path specified.
C:\Dwn
Press any key to continue . . .

为什么the system cannot find the path specified?如果我复制cd命令并自行执行它就可以正常工作。

1 个答案:

答案 0 :(得分:2)

失败,因为%% j的值包含%APPDATA%。扩展%% j时,%APPDATA%的值不会扩展,因为在FOR变量扩展之前发生了环境变量扩展。

修复方法是使用call cd "%%j"代替。 CALL将使命令经历额外的%VAR%扩展,这正是您想要的。

您还遇到一个问题,即在同一DO代码块中使用echo %CD%。它将在您更改之前回显当前目录的值,因为在解析整个FOR语句时会扩展%CD%的值。您可以使用call echo %CD%或使用SETLOCAL EnableDelayedExpansion并使用echo !CD!启用延迟展开来解决此问题。但最简单的解决方法是简单地使用cd;没有任何参数的CD命令会将当前目录打印到屏幕上。