Как вызвать пакетный файл на один уровень выше текущего каталога?

Я использую командный файл в 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

Текущий рабочий каталог - 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

Попробуйте использовать это:

start ../code.bat
Другие вопросы по тегам