У меня есть программа с отдельной настройкой для 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, и начинается установка. То же самое происходит в исходной папке. Что происходит и как я могу это исправить? Спасибо!
setlocal
, а затемpushd "%~dp0"
чуть ниже@echo off
и посмотрите, будет ли это иметь значение. - person rojo   schedule 03.01.2017"%~dp0setup.exe"
вместо"%cd%"\setup.exe
и"%~dp0setup-x64.exe"
вместо"%cd%"\setup-x64.exe
? - person JosefZ   schedule 03.01.2017%~dp0
означает направление к местоположению скрипта. Я предпочитаю использовать вариантpushd "%~dp0"
, он кажется более элегантным. Однако действительно ли мне нужноsetlocal
? Я не понял, для чего это может быть использовано, из того, что я искал. - person Alegom   schedule 03.01.2017%~dp0
должен решить проблему, но для отладки подобных проблем в будущем удалите или закомментируйте@echo off
и поставьтеpause
перед всеми точками выхода: окно команд должно оставаться открытым, вы сможете увидеть запущенные команды ( в этом случае показ%cd%
был не тем, что вы думали). - person TripeHound   schedule 03.01.2017selocal
в этом случае, так как то, что вызвало командный файл, вероятно не будет заботиться о том, чтобы он изменил текущий каталог. Тем не менее, в целом это, вероятно, хорошая практика, так как вызов пакетного файла не оставляет вас в другом каталоге (если только целью пакетного файла не является изменение каталога). - person TripeHound   schedule 03.01.2017