【发布时间】:2017-01-03 14:42:38
【问题描述】:
我有一个单独设置 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 文件并开始设置。在原始文件夹中也会发生同样的情况。发生了什么,我该如何解决?谢谢!
【问题讨论】:
-
尝试在
@echo off下方添加setlocal然后pushd "%~dp0"看看是否会有所不同。 -
"%~dp0setup.exe"代替"%cd%"\setup.exe和"%~dp0setup-x64.exe"代替"%cd%"\setup-x64.exe? -
@rojo 和 @JosefZ,您的解决方案都有效!我发现
%~dp0表示指向脚本位置。我更喜欢使用pushd "%~dp0"选项,看起来更优雅。但是,我真的需要setlocal吗?从我搜索的内容来看,我不明白它可能用于什么。 -
%~dp0技巧应该可以解决问题,但是为了在将来调试类似问题,请删除或注释掉@echo off并将pause放在所有退出点之前:命令窗口应该保持打开状态,您将能够看到正在运行的命令(在这种情况下,显示%cd%并不是您认为的那样)。 -
@Alegom 在这种情况下你可能不需要需要
selocal,因为调用批处理文件的东西可能不会关心它改变了当前目录。但是,通常这可能是“好习惯”,这样调用批处理文件不会让您进入不同的目录(除非批处理文件的目的是更改目录)。
标签: batch-file winrar sfx temporary-directory