MANIPULAÇÕES RÁPIDAS DE CASOS PARA SALVAR A LÓGICA DE ARQUIVOS DE LOTES DE EXECUÇÃO
PARA INICIAR: Eu não estou familiarizado com as formas de ignorar PAUSE
comandos em um script em lote (pelo menos no seu caso para atender às suas requisitos), a menos que você use uma das duas soluções que listarei abaixo detalhadamente. Não conheço nenhum comutador como --skippauses
que realize isso com uma solução tão simples ao chamar ou executar um script em lote que funcione apenas para pular qualquer um ou todos os comandos PAUSE
sem alterar a lógica real do script em lote anteriormente para potencialmente aceitar isso como um argumento para NÃO fazer um comando PAUSE
, mas você teria que fazer alterações na lógica do script em lote para que funcione dessa forma.
SOLUÇÃO 1 (não altera o arquivo de script em lote que você chama)
Crie dinamicamente um novo script criado dinamicamente CORRESPONDENTE à lógica do script CALLed e EXCLUDE todas as linhas que contenham a cadeia PAUSE
(insensível a maiúsculas e minúsculas) e execute o script criado dinamicamente com a mesma lógica do script CALLed menos todos LINES contendo PAUSE
e, portanto, qualquer comando PAUSE
.
Basta adicionar algo semelhante ao seu myBatch.bat
como meu exemplo abaixo e não se esqueça de apontar diretórios, etc., onde esses precisam ser. Essencialmente, isso executará o comando FINDSTR /i /v
com relação ao script você CALL
e, em seguida, lerá linha por linha, mas EXCLUDE todas as linhas que contiverem a sequência PAUSE
que NÃO seja sensível a maiúsculas e canalize isso para um novo script em lote dinamicamente construído com um nome exclusivo em que você executa o CALL
.
EXEMPLO DE SCRIPT
@ECHO OFF
:: Parse out space from hour part of time and replace with a zero (for hours of 00:00 - 09:59)
SET hh=%TIME:~0,2%
SET hh=%hh: =0%
SET DateString=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%_%hh%%TIME:~3,2%%TIME:~6,2%
SET DynScriptName=%Temp%\NOPAUSE_%~N0_%DateString%.cmd
:: If DynScriptName already exists, just delete it
IF EXIST "%DynScriptName%" DEL /F /Q "%DynScriptName%"
:: Use FINDSTR to ignore all lines containing "pause" but pipe all other lines to DynScriptName to later CALL/EXECUTE
:: /i switch denotes case insensitivity, /v switch denotes exclude value in results piped to DynScriptName
FINDSTR /i /v "pause" "C:\folder\folder\myBatch.bat">"%DynScriptName%"
:: Call the dynamically built script without PAUSE command lines
CALL "%DynScriptName%"
:: If DynScriptName already exists, just delete it (post cleanup)
IF EXIST "%DynScriptName%" DEL /F /Q "%DynScriptName%"
GOTO EOF
CONCLUSÃO: Isso ( Solution 1
) deve satisfazer suas duas necessidades em particular:
-
Você tem uma maneira de executar um script criado dinamicamente sem
PAUSE
comandos baseados na execução de um script que cria dinamicamente um novo script com base na lógica desses scripts [contents], por execução, mas para excluir todos osPAUSE
contendo linhas e, assim, eliminando os comandosPAUSE
da execução. -
Além disso, certifique-se de que o script atual que você está executando via
CALL
NÃO precise ser modificado para acomodar as alterações solicitadas em sua consulta, pois ela apenas reconstrói dinamicamente outra excluída o que você pediu. -
Além disso, outra solução simples como em
Solution 2
(abaixo) fornece um método para realmente fazer alterações no script chamado CALL, se você também quiser considerar essa rota fácil, tenho meu exemploSolution 2
, assim como os outros artigos para mudanças necessárias nesse nível.
SOLUÇÃO 2 (muda a lógica do script de lote)
No seu script com o comando PAUSE
, você colocaria um rótulo como abaixo, por exemplo. Em seguida, você colocaria um rótulo na lógica logo após o comando PAUSE
para poder adicionar IF
logic para procurar o primeiro argumento passado ao script quando ele for executado.
Logo acima do rótulo do comando PAUSE
(significando :PauseLabel
no meu exemplo) , você colocaria o IF [%1]==[] GOTO PauseLabel
e a próxima linha abaixo que você colocaria GOTO SkipPause
.
Isto diz se o script foi executado e NÃO o primeiro argumento que passou, então vá para :PauseLabel
e faça o que está lá, que é PAUSE.
Se houver QUALQUER primeiro argumento passado, então ele irá para :SkipPause
e faça o seguinte, que é o resto da sua lógica sem o comando PAUSE
.
Dessa forma, as pessoas podem executá-lo manualmente o dia todo clicando duas vezes nele (sem passar um argumento), mas o trabalho agendado pode passar qualquer primeiro argumento desejado (é apenas um argumento falso) para garantir que IF
lógica pode apenas confirmar se existe ou se é NULL.
Script com PAUSE
comando Primeiro argumento de verificação e ignorar o exemplo da lógica abaixo
<Script logic before PAUSE>
IF [%1]==[] GOTO PauseLabel
GOTO SkipPause
:PauseLabel
PAUSE
:SkipPause
<Rest of your batch logic>
Passando o exemplo do argumento para o seu script (onde está agendado)
myBatch.bat SkipPause
Por favor, note que quando você agendar o lote, o primeiro argumento pode ser SkipPause
, dummy
, DosEquis
ou qualquer outra coisa que você queira que seja. A lógica com o IF
apenas diz: "existe um argumento passado para o script quando ele foi executado e, em caso afirmativo, vá para :SkipPause
, se não, vá para :PauseLabel
.