【问题标题】:How to call .bat file from another .bat file when run as administrator in Windows 7在 Windows 7 中以管理员身份运行时如何从另一个 .bat 文件调用 .bat 文件
【发布时间】:2013-06-24 07:01:09
【问题描述】:

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

caller.bat

call callee.bat
pause

callee.bat

echo "All good"

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

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

【问题讨论】:

    标签: batch-file cmd


    【解决方案1】:

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

    cd /D %~dp0
    call callee.bat
    pause
    

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

    更多信息在这里:Hidden features of Windows batch files

    【讨论】:

    • 同意,或者直接使用call %~dp0callee.bat,避免离开管理工作目录。 (我的意思是目录,而不是权限).
    • 好主意 gmo - 虽然在我的情况下,我希望它像双击运行它一样工作,这意味着它无论如何都必须在同一个目录中运行。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多