如何在Windows 7中以管理员身份运行时从另一个.bat文件调用.bat文件

时间:2013-06-24 07:01:10

标签: batch-file cmd

这是一个简单的例子,在同一目录中有两个bat文件caller.bat和callee.bat。

caller.bat

call callee.bat
pause

callee.bat

echo "All good"

当我通过在资源管理器中双击它来运行caller.bat时它按预期工作但是如果使用右键单击“以管理员身份运行”我得到

'callee.bat'未被识别为内部或外部命令......

2 个答案:

答案 0 :(得分:4)

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

cd /D %~dp0
call callee.bat
pause

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

此处有更多信息:Hidden features of Windows batch files

答案 1 :(得分:0)

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

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

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

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