解压 SFX WinRAR 文件后,批处理脚本不会 运行 在临时文件夹中
Batch script does not run in temporary folder after decompressing SFX WinRAR file
我有一个针对 32 位和 64 位分别设置的程序。我的目标是创建一个可以 运行 适当设置的可执行文件。所以我创建了一个文件夹,把两个设置放在里面,然后写了下面的脚本:
@echo off
if %PROCESSOR_ARCHITECTURE%==AMD64 goto :x64
if %PROCESSOR_ARCHITEW6432%==AMD64 goto :x64
:x86
"%cd%"\setup.exe
exit
:x64
"%cd%"\setup-x64.exe
exit
后来,我在WinRAR中用这个文件夹创建了SFX文件,指向BAT文件。但是当我 运行 它时,命令行 window 弹出并立即关闭,没有任何反应。我转到临时文件夹并双击 BAT 文件,安装程序开始。原始文件夹中也会发生同样的情况。发生了什么事,我该如何解决?谢谢!
%cd%
指批处理文件的调用目录
例如批处理文件在 %USERPROFILE%\Desktop\Folder\bat.bat
:
echo %cd%
pause
你可以从命令行启动它,例如:
C:\>%USERPROFILE%\Desktop\Folder\bat.bat
它应该回应 C:\
因为这是你调用它的地方。
解决问题的两种方法来自评论:
使用 pushd "%~dp0"
推送批处理文件的目录 -> 将导致 %cd%
的变量值发生变化
或
不使用 "%cd%"
但 "%~dp0"
这两种方式都利用了批处理文件的第零个参数是它的路径这一事实。
如果可能的话,如果您从命令提示符本身调试文件,您可以防止命令行 window 关闭。有了它,您应该已经看到一个类似 ...\setup.exe not found
的错误。之后,批处理文件无需执行任何操作,因此它关闭了。
我有一个针对 32 位和 64 位分别设置的程序。我的目标是创建一个可以 运行 适当设置的可执行文件。所以我创建了一个文件夹,把两个设置放在里面,然后写了下面的脚本:
@echo off
if %PROCESSOR_ARCHITECTURE%==AMD64 goto :x64
if %PROCESSOR_ARCHITEW6432%==AMD64 goto :x64
:x86
"%cd%"\setup.exe
exit
:x64
"%cd%"\setup-x64.exe
exit
后来,我在WinRAR中用这个文件夹创建了SFX文件,指向BAT文件。但是当我 运行 它时,命令行 window 弹出并立即关闭,没有任何反应。我转到临时文件夹并双击 BAT 文件,安装程序开始。原始文件夹中也会发生同样的情况。发生了什么事,我该如何解决?谢谢!
%cd%
指批处理文件的调用目录
例如批处理文件在 %USERPROFILE%\Desktop\Folder\bat.bat
:
echo %cd%
pause
你可以从命令行启动它,例如:
C:\>%USERPROFILE%\Desktop\Folder\bat.bat
它应该回应 C:\
因为这是你调用它的地方。
解决问题的两种方法来自评论:
使用 pushd "%~dp0"
推送批处理文件的目录 -> 将导致 %cd%
或
不使用 "%cd%"
但 "%~dp0"
这两种方式都利用了批处理文件的第零个参数是它的路径这一事实。
如果可能的话,如果您从命令提示符本身调试文件,您可以防止命令行 window 关闭。有了它,您应该已经看到一个类似 ...\setup.exe not found
的错误。之后,批处理文件无需执行任何操作,因此它关闭了。