Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何从pendrive以管理员身份运行.bat(运行同一目录中的.exe)?_Windows_Batch File_Cmd - Fatal编程技术网

Windows 如何从pendrive以管理员身份运行.bat(运行同一目录中的.exe)?

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”。请确保键入的名称正确,

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

为了做到这一点,我使用了以下答案:

代码如下:

@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。我把它拿走了。