Пакетный скрипт не запускается во временной папке после распаковки файла SFX WinRAR

У меня есть программа с отдельной настройкой для 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

После этого я создал SFX-файл с этой папкой в ​​WinRAR, указывая на BAT-файл. Но когда я запускаю его, окно командной строки всплывает и мгновенно выключается, и ничего не происходит. Я захожу во временную папку и дважды щелкаю BAT-файл, и начинается установка. То же самое происходит в оригинальной папке. Что происходит и как я могу это исправить? Спасибо!

1 ответ

Решение

%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, После этого ничего не нужно было делать из командного файла, чтобы он закрылся.

Другие вопросы по тегам