JEŻELI warunek nie działa w zaplanowanym skrypcie wsadowym

1

Mam zaplanowany skrypt wsadowy, oparty na parametrze daty, który powinien być uruchomiony w czw. ale nie działa zgodnie z oczekiwaniami.

Znajdź poniższy kod.

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

zgodnie z powyższym kodem, jeśli data / dzień odpowiada „Cz”, powinien zapisać dziennik i wykonać inny skrypt wsadowy.

ale nawet w „czwartku” nie zapisuje dziennika i nie uruchamia skryptu. czy możesz to sprawdzić i pomóc rozwiązać to samo. Proszę zasugeruj.

RajuK
źródło
Włącz echo i spójrz na prawdziwe polecenia w oknie CMD.
Akina

Odpowiedzi:

5

Polecenie IF pasuje do wszystkich znaków, łącznie z cudzysłowami - Thu nie pasuje "Thu".

Więc jedno z poniższych będzie działać:

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

EDYCJA - Właśnie zdałem sobie sprawę, że dodałeś cudzysłowy do wartości, kiedy zdefiniowałeś RDAY. Więc moja sugestia powyżej w kolorze żółtym nie jest całkiem poprawna. Wolę używać set "RDAY=%date:~0,3%", który nie dodaje cudzysłowów do wartości. Ale to bardziej kwestia stylu.

Zatem przypuszczalnie Twoja instrukcja IF nigdy nie jest prawdziwa, ponieważ twoja maszyna używa innego formatu dla %DATE%wartości, która nie zaczyna się od skrótu dnia tygodnia

Istnieją jednak inne problemy ze skryptem:

Tylko twój wiersz dziennika jest warunkowy, skrypt czwartkowy będzie uruchamiany codziennie. Można to łatwo naprawić, dodając nawiasy do bloku IF

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

Format %DATE%wartości zależy od ustawień regionalnych. Twój skrypt prawdopodobnie nie będzie działał na innym komputerze. Możesz użyć WMIC, aby łatwo ustalić, czy jest czwartek w sposób lokalny agnostyczny:

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

Ale mam do ciebie pytanie - dlaczego planujesz codzienne zadanie wsadowe, które uruchamia kolejną partia tylko w czwartek? Jeśli chcesz uruchomić zadanie wsadowe w czwartki, skorzystaj z Harmonogramu zadań systemu Windows, aby to zrobić. Nie ma potrzeby ustalania, czy w skrypcie wsadowym jest dzisiaj czwartek, niech planista wykona pracę.

dbenham
źródło
2

Podczas przeglądania skryptu w moim systemie% RDAY% wydaje się być wartością „27”, która jest bieżącym dniem miesiąca, a nie dniem „Cz”, jak się spodziewasz.

Sugeruję wypróbowanie następujących opcji:

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

Znaleziono dzień tygodnia jako wartość liczbową z artykułu o przepełnieniu stosu ( https://stackoverflow.com/questions/11364147/setting-a-windows-batch-file-variable-to-the-day-of-the-week ) .

Zakładam, że plik wsadowy „RunTh Czwartek” chcesz uruchomić tylko wtedy, gdy czwartek jest prawdą, twoje oryginalne podejście uruchamiałoby plik wsadowy codziennie, ponieważ znajdował się poza instrukcją IF. Dołączenie instrukcji IF do „&&” pozwala również na wykonanie pliku wsadowego.

Mam nadzieję, że to pomaga.

CraftyB
źródło