ฉันควรทำอย่างไรถ้าฉันต้องการจัดตารางงานเช่นวันที่ห้าในเดือน แต่ไม่ใช่ช่วงวันหยุดสุดสัปดาห์ ตัวอย่าง: ถ้าวันที่ห้าเป็นวันเสาร์ดังนั้นงานจะถูกกำหนดในวันจันทร์
ขอบคุณสำหรับคำตอบ
ฉันควรทำอย่างไรถ้าฉันต้องการจัดตารางงานเช่นวันที่ห้าในเดือน แต่ไม่ใช่ช่วงวันหยุดสุดสัปดาห์ ตัวอย่าง: ถ้าวันที่ห้าเป็นวันเสาร์ดังนั้นงานจะถูกกำหนดในวันจันทร์
ขอบคุณสำหรับคำตอบ
คำตอบ:
ด้านล่างเป็นโซลูชันที่ฉันเคยใช้ในอดีตสำหรับงานที่คล้ายกันซึ่งฉันแก้ไขเล็กน้อยเพื่อให้สามารถช่วยเหลือคุณได้ เคล็ดลับคือการให้ตัวกำหนดเวลางานดำเนินการสคริปต์ชุดงานและให้ชุดสคริปต์ที่ดำเนินการมีตรรกะในการทำการตรวจสอบเงื่อนไขในการเรียกใช้หรือไม่
คุณสามารถใช้CALL
หรือSTART
เรียกใช้ไฟล์ปฏิบัติการ (แอพ), แบตช์สคริปต์อื่น, รันสคริปต์ PowerShell และสคริปต์ประเภทอื่น ๆ บางครั้งTask Schedulerอาจไม่แข็งแรงพอสำหรับความต้องการกำหนดการพิเศษเช่นในกรณีนี้
เป็นหลักแก้ปัญหานี้จะ . .
เรียกมันรัน ทุกเดือนบน
5th
,6th
และ7th
ดังนั้นหากเสาร์เป็น5th
, อาทิตย์เป็น6th
แล้วจันทร์ จะเป็น7th
แต่แม้ว่าอาทิตย์เป็น5th
หรือ6th
มันจะยังคงทำงานในจันทร์6th
หรือ7th
รวมสคริปต์ชุดที่จะทำงานบางตรรกะเงื่อนไขเริ่มต้นที่จะตรวจสอบวันของสัปดาห์และดำเนินการตามเงื่อนไขเหล่านี้หรือไม่ที่จะสร้างไฟล์ที่มีคำว่า
Run
ในนั้น แต่ถ้ามันมีอยู่แล้วได้รับการสร้างขึ้นด้วยRun
การที่ เดือนแล้วEXIT
หมายเหตุ: สิ่งเดียวที่คุณต้องปรับด้วยนี่คือการใช้พา ธ ที่ถูกต้องในSET RunFile=C:\SomeFolder\SomePath\
ส่วนที่จะทำให้มันเป็นโฟลเดอร์ที่ถูกต้องหรือเส้นทาง UNC เพื่อสร้างไฟล์ทำงาน ฯลฯ จากนั้นให้ทำการ<Rest of logic needed >
รันหรือรันตรรกะหรือสคริปต์ใด ๆ ก็ตามTask Schedulerกำลังทำงานอยู่ในขณะนี้
@ECHO ON
::: -- Set date variables for conditional logic for the current date and day of week
FOR /F "TOKENS=1 DELIMS=." %%A IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET rundt=%%~A
SET rundt=%rundt:~0,6%
FOR /F "TOKENS=1 DELIMS=." %%A IN ('WMIC PATH Win32_LocalTime GET DayOfWeek ^| FINDSTR /R [0-9]') DO SET DOW=%%~A
::: -- If the day today is 6 for Saturday or 7 for Sunday then EXIT
IF %DOW%==6 EXIT
IF %DOW%==7 EXIT
::: -- Set the run file location to create a file with "run" in it if the day is correct
SET RunFile=C:\SomeFolder\SomePath\%rundt%.run
::: -- If "Run" already found in "~\<YYYYMM>.run" file then do not run because it already has this month
FINDSTR /I Run "%RunFile%"
IF ERRORLEVEL 1 (GOTO :Run) ELSE (EXIT)
:Run
ECHO Run>"%RunFile%"
<Rest of logic needed >
<CALL C:\folder\app.exe >
EXIT