Como chamar um arquivo em lotes que é um nível acima do diretório atual?

Estou usando um arquivo em lotes em folder1/folder2/file.bat

Há um arquivo de lote na pasta pai folder1 , que eu quero abrir através de file.bat

Eu tentei usar:

 start ..\..\code.bat 

Mas isso resulta em uma mensagem de erro, porque o arquivo não pôde ser encontrado.

Alguma ideia?

Você poderia apenas:

 cd.. start Code.bat 

E isso iria iniciar o code.bat de seu próprio diretório

Eu quero explicar melhor o que deve ser usado com um exemplo como as respostas postadas até agora funcionam apenas com o diretório de trabalho atual sendo o diretório que contém o arquivo de lote file.bat .

Existe uma estrutura de diretórios da seguinte maneira:

  • C: \
    • Temp
      • Pasta 1
        • Pasta 2
          • Example.bat
        • Parent.bat

O diretório de trabalho atual é C: \ Temp ao executar Example.bat ou com

 "Folder 1\Folder 2\Example.bat" 

ou com

 "C:\Temp\Folder 1\Folder 2\Example.bat" 

O arquivo de lote Parent.bat contém, por exemplo:

 echo %0 is active. pause 

O arquivo de lote Example.bat já contém:

 @echo off echo Calling Parent.bat ... rem How to run Parent.bat here? echo %0 is active. pause 

As soluções realmente funcionais neste cenário, com o diretório de trabalho atual sendo um diretório diferente do diretório que contém Example.bat são as seguintes.


Continue o processamento em lote com o Parent.bat

 "%~dp0..\Parent.bat" 

%0 referência ao argumento 0 na execução do arquivo em lote, que é sempre o nome do arquivo em lote, conforme especificado no processo pai ao iniciar o arquivo em lote.

Mas queria é a unidade e caminho do arquivo de lote sem aspas duplas. Portanto, a expressão %~dp0 é usada para obter C: \ Temp \ Folder 1 \ Folder 2 \ do argumento 0.

Neste caminho, a cadeia .. \ Parent.bat é anexada e, além disso, todo o novo nome de arquivo
C: \ Temp \ Pasta 1 \ Pasta 2 \ .. \ Parent.bat é colocado entre aspas duplas por causa dos espaços.

Não há retorno para o Example.bat após o término do processamento do Parent.bat .


Chame o Parent.bat como uma sub-rotina

 call "%~dp0..\Parent.bat" 

A chamada de comando resulta na execução do arquivo em lote Parent.bat no mesmo processo de comando (janela do console) com a interrupção da execução de Example.bat até que Parent.bat concluído.

A execução em lote continua na próxima linha no Example.bat após o processamento do Parent.bat concluído.

Exceção:
Parent.bat contém a exit comando sem o comutador /B porque isso resulta em uma saída imediata do cmd.exe interpretador de linha de comandos, processando Example.bat e Parent.bat .

Executar call /? ou help call uma janela de prompt de comando para ajuda breve na chamada de comando.


Inicie o Parent.bat como processo paralelo

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

Início de comando sem qualquer parâmetro, com exceção dos resultados de título opcionais na execução do arquivo de lote Parent.bat por um processo de comando separado em uma janela de console separada sem interromper a execução de Example.bat .

Portanto, ambos os arquivos em lote são executados ao mesmo tempo (mais ou menos).

Nota:
O comando start interpreta a primeira string entre aspas duplas como título. Portanto, é necessário definir explicitamente um título entre aspas duplas quando o arquivo em lote ou o aplicativo a ser iniciado ou qualquer argumento do arquivo / aplicativo em lote iniciado deve ser especificado entre aspas duplas devido a um ou mais espaços.

Executar start /? ou help start em uma janela de prompt de comandos para obter ajuda breve sobre o início do comando.


Chame o Parent.bat como processo separado

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

Início de comando com parâmetro opcional /wait resultados de /wait na execução do arquivo em lote / aplicativo iniciado como processo separado (janela de console adicional para um arquivo de lote ou aplicativo de console), mas interrompendo a execução do arquivo de lote atual até o processo iniciado arquivo de lote / aplicativo de console executado em uma nova janela de console) termina sozinho.

..\ é usado para subir um nível. seu caso requer dois níveis acima Tente:

 start ..\..\code.bat 

tente usar isso:

 start ../code.bat