解压 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 的错误。之后,批处理文件无需执行任何操作,因此它关闭了。