Windows 如何从pendrive以管理员身份运行.bat(运行同一目录中的.exe)?
我能够以管理员身份运行.bat(运行同一目录中的.exe):我右键单击bat文件并选择“以管理员身份运行” 为了做到这一点,我使用了以下答案: 代码如下:Windows 如何从pendrive以管理员身份运行.bat(运行同一目录中的.exe)?,windows,batch-file,cmd,Windows,Batch File,Cmd,我能够以管理员身份运行.bat(运行同一目录中的.exe):我右键单击bat文件并选择“以管理员身份运行” 为了做到这一点,我使用了以下答案: 代码如下: @echo关闭 :A cls 这将启动程序。 暂停 cd%~dp0 启动%1myprogram.exe 退出 但是,这仅在.bat文件和程序位于系统驱动器中时才起作用 因为,例如,如果它们位于pendrive中,我右键单击并选择“以管理员身份运行”,则会出现以下错误: Windows找不到“myprogram.exe”。请确保键入的名称正确,
@echo关闭
:A
cls
这将启动程序。
暂停
cd%~dp0
启动%1myprogram.exe
退出
但是,这仅在.bat文件和程序位于系统驱动器中时才起作用
因为,例如,如果它们位于pendrive中,我右键单击并选择“以管理员身份运行”,则会出现以下错误:
Windows找不到“myprogram.exe”。请确保键入的名称正确,然后重试
为什么会发生这种情况,我如何修复它?
我认为通过使用cd%~dp0,它将始终指向bat.文件所在的文件夹
提前感谢。如果当前驱动器是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
?如果右键单击批处理文件来运行它,如果当前驱动器是C(例如,提示符显示C:\>
),并且您使用CD D:\FOO
,那么就不会出现%1。,驱动器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
)解决方案
将cd%~dp0改为cd/d%~dp0
解释
当您以管理员权限运行某项操作时,工作目录将更改为:
“C:\Windows\System32”
虽然%%dp0仍然指向包含批处理文件的驱动器和目录,但cd%%dp0不起作用,因为它只更改目录,而保持在同一驱动器上。
使用/d参数,您也可以告诉cd命令更改驱动器。解决方案
将cd%~dp0改为cd/d%~dp0
解释
当您以管理员权限运行某项操作时,工作目录将更改为:
“C:\Windows\System32”
虽然%%dp0仍然指向包含批处理文件的驱动器和目录,但cd%%dp0不起作用,因为它只更改目录,而保持在同一驱动器上。
使用/d参数,您也可以告诉cd命令更改驱动器。您可能需要告诉cd也更改驱动器:
cd /d %~dp0
您可能需要告诉cd更换驱动器:
cd /d %~dp0
很抱歉,cd
命令可以更改驱动器。使用/d
参数:cd/d%~dp0
我不知道这一点。我将编辑我的答案,这样pushd就不会再被误用了。@Stephan-谢谢你在/D
上提供的信息;这对我来说也是新的。对不起,cd
命令可以更改驱动器。使用/d
参数:cd/d%~dp0
我不知道这一点。我将编辑我的答案,这样pushd就不会再被误用了。@Stephan-谢谢你在/D
上提供的信息;这对我来说也是新鲜事。杰夫,你是对的,没有必要使用%1。我已经删除了。杰夫,你是对的,不需要%1。我把它拿走了。