通常发布使用CD
批处理脚本中的环境变量来获取当前工作目录的提示。但是在输入另一个批处理文件CD
时不会更新。call
然后该cd
命令回显另一个批处理文件的新路径,但%CD%
(或!CD!
)未更新。例子:
@echo off
cd %~dp0
echo in %0: CD=%CD%
pause
call X:\testcall.cmd
将此另存为C:\testcall.cmd
and 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
时才设置。真的?