通常发布使用CD批处理脚本中的环境变量来获取当前工作目录的提示。但是在输入另一个批处理文件CD时不会更新。call然后该cd命令回显另一个批处理文件的新路径,但%CD%(或!CD!)未更新。例子:
@echo off
cd %~dp0
echo in %0: CD=%CD%
pause
call X:\testcall.cmd
将此另存为C:\testcall.cmdand X:\testcall.cmd,然后运行C:\testcall.cmd. 您应该看到 的值CD没有改变。这似乎不依赖于call; 以下均无效:
start /D <NEW_DIR> <OTHER_CMD_FILE>
start cmd /c <NEW_DIR>\<OTHER_CMD_FILE>
cmd /c <NEW_DIR>\<OTHER_CMD_FILE>
<NEW_DIR>\<OTHER_CMD_FILE>
cd %~dp0
pushd %~dp0
CD将保留它的旧值,而cd(命令)显示正确的目录。因此我CD在脚本的开头设置:
set CD=%~dp0
...虽然假设cmd.exe仅在此变量尚未设置CD时才设置。真的?