1

我有一个单独设置 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 文件。但是当我运行它时,会弹出一个命令行窗口并立即关闭,什么也没有发生。我转到临时文件夹并双击 BAT 文件并开始设置。在原始文件夹中也会发生同样的情况。发生了什么,我该如何解决?谢谢!

4

1 回答 1

2

%cd%指批处理文件的调用目录。

例如,批处理文件位于%USERPROFILE%\Desktop\Folder\bat.bat

echo %cd%
pause

例如,您可以像这样从命令行启动它:

C:\>%USERPROFILE%\Desktop\Folder\bat.bat

它应该回显C:\,因为那是您调用它的地方。

从评论中解决问题的两种方法:

使用 -> 推送批处理文件的目录pushd "%~dp0"将导致变量值的变化%cd%

或者

不使用"%cd%""%~dp0"

两种方式都使用批处理文件的第零个参数是它的路径这一事实。

如果可能的话,如果您从命令提示符本身调试文件,则可以阻止命令行窗口关闭。有了它,您应该已经看到一个错误,状态类似于...\setup.exe not found. 之后,无需从批处理文件中执行任何操作,因此它关闭了。

于 2017-01-03T15:12:41.710 回答