批量内容:
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
命令并自行执行它就可以正常工作。
答案 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命令会将当前目录打印到屏幕上。