0

批次内容:

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命令并自行执行它,它工作正常。

4

1 回答 1

2

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

解决方法是call cd "%%j"改用。CALL 将导致命令经过额外级别的 %VAR% 扩展,这正是您想要的。

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

于 2012-04-13T15:23:21.590 回答