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

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

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

Я попытался использовать:

start ..\..\code.bat

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

Любые идеи?

Ответ 1

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

cd..
start Code.bat

И это запустит code.bat из своего собственного каталога

Ответ 2

Я хочу лучше объяснить, что следует использовать с примером, поскольку ответы, опубликованные до сих пор, работают только с текущим рабочим каталогом, являющимся каталогом, содержащим командный файл file.bat.

Существует структура каталогов следующим образом:

  • C:\
    • Temp
      • Папка 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 в окне командной строки для краткой справки по команде start.


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

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

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

Ответ 3

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

start ..\..\code.bat

Ответ 4

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

start ../code.bat