这是一个简单的例子,在同一目录中有两个 bat 文件 caller.bat 和 callee.bat。
调用者.bat
call callee.bat
pause
Run Code Online (Sandbox Code Playgroud)
被调用者.bat
echo "All good"
Run Code Online (Sandbox Code Playgroud)
当我通过在资源管理器中双击 caller.bat 运行它时,它按预期工作,但如果使用右键单击“以管理员身份运行”,我会得到
'callee.bat' 未被识别为内部或外部命令...
问题是当以管理员身份运行时,当前工作目录更改为 C:\Windows\System32。我的解决方案是将 caller.bat 中的当前工作目录显式更改为与运行文件的目录相同。这是通过从 %0 参数中提取驱动器和路径来完成的,如下所示:
cd /D %~dp0
call callee.bat
pause
Run Code Online (Sandbox Code Playgroud)
cd 的 /D 参数会导致目录和路径发生更改,并且需要处理调用方 .bat 文件不在 C: 驱动器上的情况。
更多信息:Windows 批处理文件的隐藏功能