1

Here's a simple example with two bat files, caller.bat and callee.bat in the same directory.

caller.bat

call callee.bat
pause

callee.bat

echo "All good"

When I run caller.bat by double clicking it in Explorer it works as expected but if use right-click "Run as administrator" I get

'callee.bat' is not recognized as an internal or external command...

4

2 回答 2

5

问题是当以管理员身份运行时,当前工作目录更改为 C:\Windows\System32。我的解决方案是将 caller.bat 中的当前工作目录显式更改为与运行文件的目录相同。这是通过从 %0 参数中提取驱动器和路径来完成的,如下所示:

cd /D %~dp0
call callee.bat
pause

cd 的 /D 参数会导致目录和路径发生更改,并且需要处理调用方 .bat 文件不在 C: 驱动器上的情况。

更多信息:Windows 批处理文件的隐藏功能

于 2013-06-24T07:01:09.733 回答
0

另一种解决方案是将存储脚本的目录添加到路径系统环境变量中。您可以通过 windows 在高级系统设置中提供的 GUI 执行此操作(在开始菜单中键入环境变量,您应该会看到该选项),或者您可以以管理员身份运行 cmd 会话并输入:setx path %path%;"你的脚本目录”/M

/M 使其成为系统范围,而不仅仅是您的用户(这需要管理员)。仅当路径中有空格时才需要双引号。path 变量包含由分号分隔的路径列表。以上只是将一个新条目附加到现有列表中。向列表中添加条目允许您从该目录执行程序而无需指定路径。

最后,如果这不起作用,您可能还需要将 .cmd 和/或 .bat 添加到您的 pathext 变量中: setx pathext %pathext%;.cmd;.bat /M

要检查变量的当前值,请设置 var_name 即:set pathext

于 2013-06-24T07:33:14.780 回答