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

Я использую пакетный файл в folder1/folder2/file.bat

В родительской папке folder1 есть пакетный файл, который я хочу открыть через file.bat

Я пробовал использовать:

 start ..\..\code.bat 

Но это приводит к сообщению об ошибке, поскольку файл не найден.

Есть идеи?

Вы могли бы просто:

 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 в том же командном процессе (окно консоли) с остановкой выполнения Parent.bat до завершения Parent.bat .

Исполнение партии продолжается на следующей строке в Example.bat после завершения обработки Parent.bat .

Исключение:
Parent.bat содержит команду exit без switch /B потому что это приводит к немедленному Parent.bat обработки cmd.exe интерпретатора командной строки. Parent.bat и Parent.bat .

Выполнить call /? или help call в окно командной строки для краткой справки по вызову команды.


Запустите Parent.bat как параллельный процесс

 start "Parent Batch" "%~dp0..\Parent.bat" 

Командный запуск без каких-либо параметров, за исключением дополнительного заголовка, приводит к выполнению командного файла Parent.bat отдельным процессом команды в отдельном окне консоли без остановки выполнения Example.bat .

Поэтому оба командных файла запускаются в одно и то же время (более или менее).

Заметка:
Командное начало интерпретирует первую строку в двойных кавычках как заголовок. Поэтому необходимо явно указать заголовок в двойных кавычках, когда запускается командный файл или приложение, или любой аргумент начального командного файла / приложения должен быть указан в двойных кавычках из-за 1 или более пробелов.

Выполнить start /? или help start в окне командной строки для краткой справки при запуске команды.


Вызов Parent.bat как отдельный процесс

 start "Parent Batch" /wait "%~dp0..\Parent.bat" 

Запуск команды с дополнительными параметрами /wait результатами при запуске запущенного командного файла / приложения в виде отдельного процесса (дополнительное консольное окно для командного файла или консольного приложения), но остановка выполнения текущего командного файла до запуска процесса (приложение Windows или приложение пакетного файла / консоли, выполняемое в новом окне консоли) завершается.

..\ используется для перехода на один уровень вверх. ваше дело требует двух уровней. Попробуйте:

 start ..\..\code.bat 

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

 start ../code.bat 
Давайте будем гением компьютера.