这是一个简单的例子,在同一目录中有两个bat文件caller.bat和callee.bat。
caller.bat
call callee.bat
pause
callee.bat
echo "All good"
当我通过在资源管理器中双击它来运行caller.bat时它按预期工作但是如果使用右键单击“以管理员身份运行”我得到
'callee.bat'未被识别为内部或外部命令......
答案 0 :(得分:4)
问题是当以管理员身份运行时,当前工作目录将更改为C:\ Windows \ System32。我的解决方案是明确地将caller.bat中的当前工作目录更改为与运行文件的目录相同。这是通过从%0参数中提取驱动器和路径来完成的,如下所示:
cd /D %~dp0
call callee.bat
pause
cd的/ D参数会导致目录和路径发生变化,并且需要处理调用者.bat文件不在C:驱动器上的情况。
答案 1 :(得分:0)
另一种解决方案是将存储脚本的目录添加到路径系统环境变量中。您可以通过Windows在高级系统设置中提供的GUI(在开始菜单中键入环境变量,您应该看到该选项)来执行此操作,或者您可以以管理员身份运行cmd会话并输入: setx path%path%;“你的脚本目录”/ M
/ M使其成为系统范围,而不仅仅是您的用户(这是需要管理员的)。只有当您的路径中包含任何空格时,才需要双引号。 path变量包含由分号分隔的路径列表。以上只是在现有列表中添加了一个新条目。在列表中添加条目允许您从该目录执行程序而不指定路径。
最后,如果这不起作用,您可能还需要将.cmd和/或.bat添加到您的pathext变量中: setx pathext%pathext%;。cmd; .bat / M
要检查变量的当前值,请设置var_name,即: 设置pathext