Ответ 1
Вы могли бы просто:
cd..
start Code.bat
И это запустит code.bat из своего собственного каталога
Я использую пакетный файл в folder1/folder2/file.bat
В родительской папке folder1
есть пакетный файл, который я хочу открыть через file.bat
Я попытался использовать:
start ..\..\code.bat
Но это приводит к сообщению об ошибке, поскольку файл не найден.
Любые идеи?
Вы могли бы просто:
cd..
start Code.bat
И это запустит code.bat из своего собственного каталога
Я хочу лучше объяснить, что следует использовать с примером, поскольку ответы, опубликованные до сих пор, работают только с текущим рабочим каталогом, являющимся каталогом, содержащим командный файл file.bat
.
Существует структура каталогов следующим образом:
Текущий рабочий каталог C:\Temp при выполнении Example.bat
либо с
"Folder 1\Folder 2\Example.bat"
или
"C:\Temp\Folder 1\Folder 2\Example.bat"
Пакетный файл Parent.bat
содержит, например:
echo %0 is active.
pause
Пакетный файл Example.bat
содержит уже:
@echo off
echo Calling Parent.bat ...
rem How to run Parent.bat here?
echo %0 is active.
pause
Действительно работающие решения в этом сценарии с текущим рабочим каталогом представляют собой другой каталог, кроме каталога, содержащего Example.bat
, следующие.
"%~dp0..\Parent.bat"
%0
ссылается на аргумент 0 на выполнение командного файла, который всегда является именем командного файла, как указано в родительском процессе, при запуске командного файла.
Но вам нужен привод и путь к пакетному файлу без двойных кавычек. Поэтому выражение %~dp0
используется для получения C:\Temp\Folder 1\Folder 2\ из аргумента 0.
На этом пути добавляется строка ..\Parent.bat, а также все новое имя файла
C:\Temp\Folder 1\Folder 2 \..\Parent.bat заключен в двойные кавычки из-за пробелов.
Нет возврата к Example.bat
после завершения обработки Parent.bat
.
call "%~dp0..\Parent.bat"
Команда вызов приводит к выполнению командного файла Parent.bat
в том же командном процессе (окно консоли) с прекращением выполнения Example.bat
до Parent.bat
.
Выполнение партии продолжается на следующей строке в Example.bat
после завершения обработки Parent.bat
.
Исключение: Parent.bat
содержит команду exit
без ключа /B
, потому что это приводит к немедленному завершению интерпретатора командной строки cmd.exe
обработки Example.bat
и Parent.bat
.
Выполните call /?
или help call
в окне командной строки для краткой справки по команде вызов.
start "Parent Batch" "%~dp0..\Parent.bat"
Команда начать без каких-либо параметров, за исключением необязательного заголовка, приводит к выполнению командного файла Parent.bat
отдельным процессом команды в отдельном окне консоли без остановки выполнения Example.bat
.
Поэтому оба командных файла запускаются в одно и то же время (более или менее).
Примечание:
Команда start интерпретирует первую строку в двойных кавычках как заголовок. Поэтому необходимо явно указать заголовок в двойных кавычках, когда запускается командный файл или приложение, или любой аргумент начального командного файла/приложения должен быть указан в двойных кавычках из-за 1 или более пробелов.
Выполните start /?
или help start
в окне командной строки для краткой справки по команде start.
start "Parent Batch" /wait "%~dp0..\Parent.bat"
Команда start с необязательным параметром /wait
приводит к выполнению запущенного командного файла/приложения как отдельного процесса (дополнительное консольное окно для командного файла или консольного приложения), но прекращение выполнения текущий пакетный файл до запуска процесса (приложение Windows или пакетный файл/консольное приложение, выполненное в новом окне консоли) завершает себя.
..\
используется для перехода на один уровень вверх. ваше дело требует двух уровней вверх
Попробуйте:
start ..\..\code.bat
попробуйте использовать это:
start ../code.bat