Как вызвать пакетный файл на один уровень выше текущего каталога?
Я использую командный файл в folder1/folder2/file.bat
В родительской папке есть пакетный файл folder1
, что я хочу открыть через file.bat
Я пытался с помощью:
start ..\..\code.bat
Но это приводит к сообщению об ошибке, потому что файл не может быть найден.
Есть идеи?
4 ответа
Вы могли бы просто:
cd..
start Code.bat
И это запустит code.bat из своего собственного каталога
Я хочу лучше объяснить, что следует использовать с примером, поскольку ответы, опубликованные до сих пор, работают только с текущим рабочим каталогом, являющимся каталогом, содержащим пакетный файл. file.bat
,
Структура каталогов выглядит следующим образом:
- C: \
- температура
- Папка 1
- Папка 2
- Example.bat
- Parent.bat
- Папка 2
- Папка 1
- температура
Текущий рабочий каталог - 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
являются следующими.
Продолжить пакетную обработку с помощью Parent.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
законченный.
Вызовите 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
в окне командной строки для краткой справки о вызове команды.
Запустите Parent.bat как параллельный процесс
start "Parent Batch" "%~dp0..\Parent.bat"
Запуск команды без каких-либо параметров, за исключением необязательного заголовка, приводит к выполнению командного файла Parent.bat
с помощью отдельного командного процесса в отдельном окне консоли, не останавливая выполнение Example.bat
,
Поэтому оба пакетных файла запускаются одновременно (более или менее).
Замечания:
Команда start интерпретирует первую строку в двойных кавычках как заголовок. Поэтому необходимо явно определить заголовок в двойных кавычках, когда запускается пакетный файл или приложение, или любой аргумент запущенного пакетного файла / приложения должен быть указан в двойных кавычках из-за 1 или более пробелов.
казнить start /?
или же help start
в окне командной строки для краткой справки по запуску команды.
Вызовите Parent.bat как отдельный процесс
start "Parent Batch" /wait "%~dp0..\Parent.bat"
Запуск команды с необязательным параметром /wait
приводит к выполнению запущенного пакетного файла / приложения как отдельного процесса (дополнительное окно консоли для пакетного файла или консольного приложения), но останавливает выполнение текущего пакетного файла до запускаемого процесса (приложение Windows или пакетный файл / консольное приложение, выполняемое в новое окно консоли) завершается.
..\
используется для перехода на один уровень вверх. ваш случай требует два уровня вверх Попробуйте:
start ..\..\code.bat