По сути, у меня есть два сценария .bat, которые отлично работают по отдельности, однако я хотел объединить эти два сценария в одно действие, так как оно назначено на горячую клавишу, и я хочу, чтобы все это выполнялось одним нажатием клавиши, а не два, но у меня проблемы, потому что скрипты находятся в разных каталогах.
Ниже приведены два моих сценария:
BLAH-Script.bat
RE4_UHD_BLAH_Tool.exe -pDEL/F/S/Q/A "F: r101 r101_09.AEV"
и второй скрипт:
UDAS_TOOL.bat :
DEL/F/S/Q/A "F: st1 rl01.udas" пинг - n 1 localhostDEL/F/S/Q/A "F: UDAS Tool r101.udas" UDAS_Tool.exe -p
Теперь оба они отлично работают сами по себе потому что каждый из скриптов вызывает .exe, который находится в том же DIR, что и вызывающий их скрипт, но попытка поместить их в один .bat-файл не сработала с использованием функции CALL
, потому что один из сценариев существует во внешнем каталоге.
Я попытался создать новый сценарий .bat, который выполнял бы оба сценария bat за один:
call "F: pack BLAH -Script.bat "ping -n 1 localhostcall" F: pack UDAS UDAS_TOOL.bat "
Однако это не работает. Файлы не упаковываются с помощью инструментов exe как и предполагалось.
Чтобы попытаться выяснить проблему, я добавил команду pause
между скриптами:
call "F: pack BLAH-Script.bat" pausecall "F: pack UDAS_TOOL.bat"
Эта команда позволила мне прочитать вывод до закрытия окна и выдал виновного. В первом скрипте возникает следующая ошибка:
F: UD — r101 -> RE4_UHD_BLAH_Tool.exe -p’RE4_UHD_BLAH_Tool.exe ‘is не распознается как внутренняя или внешняя команда, действующая программа или пакетный файл.
Я считаю, что происходит то, что каждый файл работает нормально, если запускается в своем собственном каталоге, потому что они находятся в том же DIR, что и вызываемый .exe, но первый .bat-файл не будет выполняться, потому что третий bat-файл (тот, который вызывает первый и второй) не находится в том же DIR, что и первый .
Я пробовал:
CD/D "F: pack" call "F: pack BLAH-Script.bat" pauseCD /D "F: pack" вызывает "F: pack UDAS UDAS_TOOL.bat"
с той же ошибкой. Как мне отсортировать каталоги?
Теоретически вы можете просто полностью указать путь к исполняемому файлу или убедиться, что исполняемые файлы расположены по пути .
Однако некоторые программы предполагают , что исполняемый файл находится в текущем каталоге, и ожидают, что файлы конфигурации и т. д. аналогичным образом находятся в этом каталоге, поэтому я бы сделал следующее:
в каждом пакете после церемонии инициализации (@echo off/setlocal … ) добавьте
pushd "actalexcutablelocation"
и убедитесь, что при выходе из пакета
popd
выполняется для восстановления в исходный каталог.
pushd
переключатели текущий каталог в назначенный каталог до тех пор, пока не будет выполнено popd
для возврата к исходному.
Почему не « call »в пакетном файле Windows 7?
У меня есть файл .bat
, который содержит
вызовите "c: my path myprog.exe"
, но в командной строке указано, что call
не является командой.
Вызов не предназначен для запуска других подобных программ, он предназначен исключительно для вызова других командных файлов. Вы, вероятно, захотите start
, если ваша программа запускает другое окно, иначе просто введите команду в одной строке.
например,
запустить calc.exe "C: Stuff Program.exe"
2
«c: my path myprog.exe» без СТАРТА или вызова для выполнения вашего myprog.exe. вот как это делается в Windows 7