Se a condição não estiver funcionando no script em lote planejado

1

Eu tenho um script em lote programado, com base no parâmetro date, que deve ser executado em Thu. mas não está funcionando como esperado.

Encontre o código abaixo.

::@echo off

set LOGFILE=D:\New_Folder\SCRIPTTEST\Rundaily1.log
SET RDAY="%date:~0,3%"

if %RDAY%=="Thu" echo "Starting Weekly Matching" >> %LOGFILE%
D:\New_Folder\SCRIPTTEST\Runthursday.bat

exit /b 0

de acordo com o código acima, se data / dia corresponder a "Thu", ele deverá gravar o log e executar outro script em lote.

mas mesmo em "Thu" não está escrevendo o log e não está executando o script. você pode por favor verificar e ajudar a resolver o mesmo. Por favor sugira.

    
por RajuK 27.09.2018 / 09:14

2 respostas

5

The IF command matches all characters, including the quotes - Thu does not match "Thu".

So either of the following will work:

if %RDAY%==Thu ...
if "%RDAY%=="Thu" ...

EDITAR Acabei de perceber que você adicionou aspas ao valor quando definiu o RDAY. Então, minha sugestão acima em amarelo não é totalmente correta. Eu prefiro usar set "RDAY=%date:~0,3%" , que não adiciona aspas ao valor. Mas isso é mais uma questão de estilo.

Então presumivelmente sua declaração IF nunca é verdadeira porque sua máquina usa um formato diferente para o valor %DATE% que não começa com a abreviação do dia da semana

Mas há outros problemas com seu script:

Apenas sua linha de log é condicional, o script de quinta-feira será executado todos os dias. Isso é facilmente corrigido adicionando parênteses ao seu bloco IF

if %DATE:~0,3%==Thu (
  echo "Starting Weekly Matching" >> %LOGFILE%
  D:\New_Folder\SCRIPTTEST\Runthursday.bat
)

O formato do valor %DATE% é dependente de localidade. Seu script provavelmente não funcionará em outra máquina. Você pode usar o WMIC para determinar facilmente se é quinta-feira de uma maneira agnóstica local:

wmic path win32_localtime get dayofweek | findstr 4 >nul && (
  echo "Starting Weekly Matching" >> %LOGFILE%
  D:\New_Folder\SCRIPTTEST\Runthursday.bat
)

Mas tenho uma pergunta para você - Por que você está agendando um trabalho em lote diário que executa outro lote apenas na quinta-feira? Se você deseja executar um trabalho em lotes às quintas-feiras, use o Agendador de Tarefas do Windows para fazer exatamente isso. Não há necessidade de determinar se hoje é quinta-feira em seu script em lote, deixe o agendador fazer o trabalho.

    
por 27.09.2018 / 12:44
2

Ao passar pelo script no meu sistema,% RDAY% parece ser o valor "27", que é o dia atual do mês e não o dia "Thu" como você espera.

Eu sugeriria tentar o seguinte:

::@echo off

set LOGFILE=D:\New_Folder\SCRIPTTEST\Rundaily1.log
for /f %%a in ('wmic path win32_localtime get dayofweek /format:list ^| findstr "="') do (set %%a)

if %dayofweek%==4 echo "Starting Weekly Matching" >> %LOGFILE% && D:\New_Folder\SCRIPTTEST\Runthursday.bat

exit /b 0

Encontrou o dia da semana como valor numérico de um artigo de estouro de pilha ( link ).

Eu assumo que o arquivo de lote "RunThursday" você só quer ser executado se a quinta-feira for verdadeira, sua abordagem original executaria o arquivo de lote todos os dias como estava fora da instrução IF. Anexar sua instrução IF com "& &" permite que o arquivo em lote também seja executado.

Espero que isso ajude.

    
por 27.09.2018 / 12:58

Tags