IF koşulu, zamanlanmış toplu komut dosyasında çalışmıyor


1

Zamanlanmış bir toplu komut dosyası var, Thu üzerinde çalışması gereken tarih parametresine göre. ama beklendiği gibi çalışmıyor.

Aşağıdaki kodu bulun.

::@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

Yukarıdaki koda göre eğer tarih / gün "Per" ile eşleşiyorsa, kütüğü yazmalı ve başka bir toplu komut dosyasını çalıştırmalıdır.

ama "Thu" da bile günlük yazmıyor ve betiği çalıştırmıyor. Aynı sorunu çözmek için lütfen kontrol edip yardım edebilirsiniz. Lütfen önerin.


Echo'yu açık konuma getirin ve CMD penceresinde gerçek komutları görün.
Akina

Yanıtlar:


5

IF komutu, tırnak işaretleri dahil tüm karakterlerle eşleşir - Thu eşleşmiyor "Thu".

Yani aşağıdakilerden herhangi biri işe yarayacak:

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

DÜZENLE - RDAY'yi tanımladığınızda değere teklifler eklediğinizi farkettim. Bu yüzden yukarıdaki sarı önerim tam olarak doğru değil. Kullanmayı tercih ederim set "RDAY=%date:~0,3%", değere tırnak eklemez. Ama bu daha çok stil meselesi.

Bu nedenle, muhtemelen IF ifadeniz asla doğru olmaz, çünkü makineniz için farklı bir format kullanır. %DATE% haftanın günü kısaltmasıyla başlamayan değer

Ancak komut dosyanızla ilgili başka sorunlar var:

Sadece log hattınız şartlı, Perşembe senaryosu her gün çalışacak. Bu, IF bloğunuza parantez ekleyerek kolayca düzeltilebilir

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

Formatı %DATE% değer yerel ayarlara bağlıdır. Komut dosyanız büyük olasılıkla başka bir makinede çalışmayacak. WMIC’i kullanarak Perşembe olup olmadığını yerel olarak agnostik bir şekilde belirlemek için kullanabilirsiniz:

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

Ama sana bir sorum var - Neden sadece Perşembe günü başka bir parti yürüten günlük bir parti işi planlıyorsun? Perşembe günleri toplu iş yapmak istiyorsanız, bunu yapmak için Windows Görev Zamanlayıcı'yı kullanın. Bugün toplu iş komut dosyasınızda Perşembe olup olmadığını belirlemenize gerek yok, zamanlayıcının işi yapmasına izin verin.


2

Sistemimdeki senaryoyu okurken% RDAY%, beklediğiniz gibi "Thu" günü değil ayın geçerli günü olan "27" değeri gibi görünüyor.

Aşağıdakileri denemenizi öneririm:

::@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

Bir yığın taşma makalesinden haftanın gününü sayısal değer olarak buldu ( https://stackoverflow.com/questions/11364147/setting-a-windows-batch-file-variable-to-the-day-of-the-week ).

Toplu iş dosyası "RunThursday" yalnızca Perşembe doğruysa çalıştırmak istediğiniz varsayalım, özgün yaklaşımınız toplu iş dosyasını her gün IF ifadesinin dışında olduğu gibi yürütecektir. IF ifadenizi "& amp; & amp;" ile eklemek, toplu iş dosyasının da çalıştırılmasını sağlar.

Umarım bu yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.