Como posso depurar um script .BAT?

96

Existe uma maneira de percorrer um script .bat? A questão é que eu tenho um script de construção, que chama muitos outros scripts, e gostaria de ver em que ordem eles são chamados, para que eu possa saber exatamente onde devo fazer e adicionar minhas modificações .

Vhaerun
fonte
4dos tem um depurador embutido.

Respostas:

69

Não sei de nenhuma maneira para percorrer a execução de um arquivo .bat, mas você pode usar echoe pauseajudar na depuração.

ECHO
Ecoará uma mensagem no arquivo em lote. Como ECHO Hello World imprimirá Hello World na tela quando executado. No entanto, sem @ECHO OFF no início do arquivo em lote, você também obterá "ECHO Hello World" e "Hello World". Finalmente, se você deseja apenas criar uma linha em branco, digite ECHO. adicionar o ponto final cria uma linha vazia.

PAUSA
Solicita ao usuário que pressione qualquer tecla para continuar.

Fonte: Ajuda do arquivo em lote

@ workmad3: answer tem mais dicas boas para trabalhar com o echocomando.

Outro recurso útil ... DDB: Dicas de arquivo em lote do DOS

Eric Schoonover
fonte
1
Acho que essas são minhas únicas opções.
Vhaerun,
18

Certifique-se de que não haja instruções 'echo off' nos scripts e chame 'echo on' após chamar cada script para redefinir qualquer um que tenha perdido.

O motivo é que, se o eco for deixado ativado, o interpretador de comandos emitirá cada comando (após o processamento do parâmetro) antes de executá-lo. Faz com que pareça muito ruim para uso em produção, mas muito útil para propósitos de depuração, pois você pode ver onde a saída deu errado.

Além disso, certifique-se de verificar os ErrorLevels definidos pelos scripts e programas em lote chamados. Lembre-se de que existem 2 métodos diferentes usados ​​em arquivos .bat para isso. Se você chamou um programa, o nível de erro está em% ERRORLEVEL%, enquanto nos arquivos de lote o nível de erro é retornado na variável ErrorLevel e não precisa de% ao redor dele.

workmad3
fonte
13

Enfrentando uma preocupação semelhante, encontrei a seguinte ferramenta com uma pesquisa trivial do Google:

O " Take Command " da JPSoft inclui um arquivo em lote IDE / depurador. Seu breve vídeo de apresentação demonstra isso muito bem.

Estou usando a versão de teste há algumas horas. Aqui está minha primeira opinião humilde:

  • Por um lado, ele realmente permite depurar scripts .bat e .cmd e agora estou convencido de que pode ajudar em alguns casos
  • Por outro lado, às vezes ele bloqueia e eu tive que matá-lo ... especialmente ao depurar subscritos (nem sempre sistematicamente) .. ele não mostra uma "pilha de chamadas" nem um botão "sair".

Deve ser uma tentativa.

Myobis
fonte
1
Provavelmente deve ser um comentário
KyleMit
8
@KyleMit você pode explicar por quê? como esta é uma solução autônoma distinta das outras e que responde à pergunta original? não é porque é curto o suficiente para caber em um comentário, que tem que ..
Myobis
1
Na verdade, eu quis dizer provavelmente , no sentido de que poderia acontecer de qualquer maneira. Mas é uma resposta meio complicada . A partir da resposta centro de ajuda seção: Always quote the most relevant part of an important link. Sem o link, essa resposta se dissolve, o que, novamente, provavelmente é bom, mas normalmente esse tipo de sugestão ad-hoc de um software proprietário não testado geralmente se encaixaria melhor em um comentário. Sinta-se à vontade para sair também.
KyleMit de
8

Eu encontrei o software 'running steps' (win32) fazendo exatamente o que eu estava procurando: http://www.steppingsoftware.com/

Você pode carregar um arquivo bat, colocar pontos de interrupção / começar a percorrê-lo enquanto vê a saída e as variáveis ​​de ambiente.

A versão de avaliação só permite avançar 50 linhas ... Alguém tem uma alternativa gratuita com funcionalidade semelhante?

Jokkke99BE
fonte
7
Eles perderam esse domínio e provavelmente fecharam as portas. Você ainda pode baixar o software de avaliação em web.archive.org/web/20120421211043/http://… mas não pode mais comprar uma licença.
twasbrillig
6

remova o @ECHO OFF e chame seu arquivo em lote redirecionando TODAS as saídas para um arquivo de log.

c:> yourbatch.bat (parâmetros opcionais)> yourlogfile.txt 2> & 1

encontrado em http://www.robvanderwoude.com/battech_debugging.php

FUNCIONA!! não se esqueça do 2> & 1 ...

WIZ


fonte
2

A única maneira que eu posso pensar é spinkle o código com echos e pauses.

pular
fonte
2

Você tentou redirecionar o resultado para um arquivo? Como qualquer coisa.bat> log.txt

Você deve ter certeza de que, neste caso, todos os outros scripts chamados também estão registrando no arquivo como >> log.txt

Além disso, se você colocar uma data / T e hora / T no início e no final desse arquivo em lote, você obterá os horários em que estava naquele ponto e poderá mapear o tempo de execução e a ordem do script.

Biri
fonte
Gravar o resultado em um arquivo não ajuda muito, há muitos scripts que são chamados e, também, muitos executáveis ​​que são executados.
Vhaerun,
1
Se todos os outros scripts e programas gravarem no stdin, todas as suas mensagens também serão registradas. Se você apenas executar o lote e vir muitas mensagens em execução, poderá redirecioná-las para um arquivo de log.
Biri,
1

Ou .... Chame seu arquivo .bat principal de outro arquivo .bat e produza o resultado em um arquivo de resultado, por exemplo

runner.bat> mainresults.txt

Onde runner.bat chama o arquivo .bat principal

Você deve ver todas as ações realizadas no arquivo .bat principal agora


fonte
0

Um problema bastante frequente é que um script em lote é executado clicando duas vezes em seu ícone. Como a cmd.exeinstância do Prompt de comando ( ) da hospedagem também termina, não é possível ler a saída potencial e as mensagens de erro.

Para ler essas mensagens, é muito importante que você abra explicitamente uma janela do Prompt de Comando, vá até o diretório de trabalho aplicável e execute o script em lote digitando seu caminho / nome.

Aschipfl
fonte
0

você pode usar cmd \kno final do seu script para ver o erro. ele não fecha o seu prompt de comando após a execução ser concluída

Arpan Saini
fonte
-3

ou, abra uma janela cmd e chame o lote de lá, a saída estará na tela.

Pwn
fonte
2
Isso faz tantas suposições erradas que nem mesmo é uma resposta. provavelmente os dois maiores são que a) presume-se que o arquivo em lote produza a saída do console. Não é necessário, eb) que o arquivo em lote está realmente funcionando
Leliel