【问题标题】:How to run a .bat (that runs an .exe that is in the same directory) as administrator from a pendrive?如何从 pendrive 以管理员身份运行 .bat(运行同一目录中的 .exe)?
【发布时间】:2017-06-08 12:31:43
【问题描述】:

我能够以管理员身份运行 .bat(运行同一目录中的 .exe):我右键单击 bat 文件并选择“以管理员身份运行”。

为了能够做到这一点,我使用了以下答案:Run exe from current directory in batch

代码如下:

@echo off :A cls echo This will start the program. pause cd %~dp0 start %1myprogram.exe exit

但是,这仅在 .bat 文件和程序位于系统驱动器中时才有效。

因为,例如,如果它们在 pendrive 中,并且我右键单击并选择“以管理员身份运行”,我会收到错误:

Windows 找不到 'myprogram.exe'。请确保您输入的名称正确,然后再试一次。

为什么会发生这种情况,我该如何解决? 我认为通过使用 cd %~dp0 它将始终指向 bat .file 所在的文件夹。

提前致谢。

【问题讨论】:

    标签: windows batch-file cmd


    【解决方案1】:

    解决方案
    cd %~dp0 更改为 cd /d %~dp0

    说明
    当您以管理员权限运行某些程序时,工作目录将更改为:
    'C:\Windows\System32'
    虽然 %~dp0 仍然指向驱动器和包含批处理文件的目录,但 cd %~dp0 不起作用,因为它只是更改了目录,但仍然在同一个驱动器上。
    使用 /d 参数,您也可以告诉 cd 命令更改驱动器。

    【讨论】:

    • 抱歉,但cd 命令 能够更改驱动器。使用/d参数:cd /d %~dp0
    • 我不知道这个。我会编辑我的答案,所以 pushd 不再被滥用。
    • @Stephan - 感谢/D 上的信息;这对我来说也是新的。
    【解决方案2】:

    您可能需要告诉 cd 也更换驱动器:

    cd /d %~dp0
    

    【讨论】:

      【解决方案3】:

      如果当前驱动器是 C:(例如,提示符为 C:\>),而您执行 CD D:\FOO,则驱动器 D: 上的当前目录设置为 \FOO,但您仍将“打开”驱动器C:。请尝试以下操作:

      @echo off
      :A
      cls
      echo This will start the program.
      pause
      cd %~dp0
      %~d0
      start %1myprogram.exe
      exit
      

      (另外,为什么%1myprogram.exe 而不仅仅是myprogram.exe,或者甚至只是myprogram?如果你右键单击批处理文件来运行它,就不会有%1 .)

      【讨论】:

      • 杰夫,你是对的,%1 不是必需的。我已将其删除。
      猜你喜欢
      • 2017-04-09
      • 1970-01-01
      • 2016-10-06
      • 2017-11-24
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多