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.
Odpowiedzi:
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 tygodniaIstnieją 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
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: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ę.
źródło
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:
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.
źródło