
정확히 하루에 한 번씩 exe를 실행하도록 예약 작업을 설정하려고 합니다. 나는 다음을 시도했습니다 :
매일 오전 4시에 "예정된 시작 시간을 놓친 후 가능한 한 빨리 작업 실행"을 실행합니다.
이 접근 방식은 내 계정에 암호가 설정되어 있지 않은 경우 완벽하게 작동합니다. 이 경우 Windows는 데스크톱으로 직접 부팅됩니다. 잠시 후 작업이 실행됩니다.
내 계정에 비밀번호를 추가하면 작업이 더 이상 실행되지 않습니다. 작업 기록에 경고가 기록되는 것을 볼 수 있습니다.
시작 조건이 충족되었을 때 사용자 "Y"가 로그온하지 않았기 때문에 작업 스케줄러가 "X" 작업을 시작하지 않았습니다. 사용자 작업: 사용자가 로그온되어 있는지 확인하거나 사용자가 로그오프할 때 시작할 수 있도록 작업 정의를 변경하십시오.
이것은 어리석은 경고처럼 보입니다. "보안 옵션"에서 "사용자가 로그온할 때만 실행"이 선택되어 있습니다. 사용자가 로그온하기 전에 작업 스케줄러가 작업을 시작하려고 하는 이유는 무엇입니까?
매일 오전 4시 및 "로그온 시"에 트리거하고 가능한 한 빨리 실행합니다.
이 접근 방식은 내가 의도한 효과를 얻지 못했습니다.둘 다조건이 참이어야 합니다. 즉, "매일 오전 4시 이후"가 참이고 "로그온"이 참이면 작업을 실행합니다. 그리고 그날 연속되는 각 "로그온" 이벤트에 대해 "매일 오전 4시 이후"는 사실이 아니므로 다음 날을 기다립니다. 불행하게도 이는 작업 스케줄러의 작동 방식이 아니며 이 접근 방식을 사용하면 작업이 실행되는 방식은 다음과 같습니다.모든로그온.
사용자가 로그온했는지 여부에 관계없이 실행
실행하려는 exe가 완료되면 사용자 입력이 필요한 경우가 있기 때문에 이 접근 방식을 사용할 수 없습니다. 일반적으로 이 옵션을 사용할 수 없는 데에는 여러 가지 이유가 있습니다.
다른 옵션
절박한 해결 방법의 영역에서 파일에 기록하고 이전에 호출되었는지 감지할 수 있는 배치 스크립트 작성을 고려 중입니다.
겉으로 보기에는 일반적이고 단순해 보이는 스케줄링 사용 사례를 달성하기 위한 더 나은 방법이 분명히 있을 것입니다.
답변1
하루에 한 번씩 로그온 시 작업 실행
정확히 하루에 한 번씩 exe를 실행하도록 예약 작업을 설정하려고 합니다.
파일에 기록하고 이전에 호출되었는지 감지할 수 있는 배치 스크립트 작성을 고려 중입니다.
좋아요, 아래는 귀하가 의견에 언급한 대로 매우 기본적이고 간단한 배치 스크립트 논리가 포함된 예이며 귀하가 직면한 문제에 따라 유용할 수 있습니다.
또한 배치 스크립트를 실행할 때 작업 스케줄러가 예상대로 작동하지 않는 추가 문제가 있는 경우를 대비해 작업 스케줄러에 대한 다른 게시물(이 답변 하단)을 참조할 것입니다. 구성에서 구체적으로 선택하는 옵션과 OS가 다를 수 있지만 이 수준의 문제는 여전히 동일할 가능성이 높으므로 작업 스케줄러를 사용하지 않고 일괄 예약하는 데 문제가 있는 경우 해당 게시물도 빠르게 살펴보세요. 예상대로 작동합니다.
기본 스크립트 분석
루프 는 현재 날짜에 사용할 변수를
FOR /F
생성합니다 .YYYYMMDD
이 경로
CheckDir
는 로컬 드라이브 경로이거나 매일 파일 이름의 일부\\servername\sharename\folder
와 함께 이 작은 검사 파일을 넣을 UNC 경로입니다.YYYYMMDD
C:\Path
UNC 경로를 환경에서 가리켜야 하는 위치로 변경하거나 연결하기만 하면 됩니다.
는 앞에 가 있고 .txt 확장자 앞에 가 추가된
checkfile
파일 이름일 뿐입니다 . 예를 들어 내 예에서와 같이 오늘 의 최종 결과를 제공합니다 .%CheckDir%\
%DT%
C:\Path\VersionBackup_20130202.txt
- 이는 기본적으로 오늘 파일이 존재하는지 확인하고, 그렇다면 스크립트를 종료하고, 존재하지 않으면 파일을 만든 다음 EXE 이름이 무엇이든 VersionBackup.exe를 실행합니다. 이렇게 하면 작업 스케줄러를 사용하여 배치 스크립트를 가리키며 한 시간에 한 번씩 배치 스크립트 논리에 따라 하루에 한 번만 실행되도록 예약할 수 있습니다.
START "" "C:\Path\VersionBackup.exe"
버전 백업 작업을 수행하는 EXE 이름이 존재하는 전체 경로를 가리켜야 합니다 .
배치 스크립트 예
@ECHO ON
:::: SET YYYYMMDD format for date
FOR /F "TOKENS=2-4 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%C%%B%%A"
:SetCheckFile
SET CheckDir=C:\Path
SET checkfile=%CheckDir%\VersionBackup_%DT%.txt
IF NOT EXIST "%CheckDir%" MD "%CheckDir%"
IF EXIST "%checkfile%" GOTO EOF
ECHO Creating the check file for date %DT% to ensure only one Version Backup run for the day>>"%checkfile%"
:StartApp
START "" "C:\Path\VersionBackup.exe"
GOTO EOF
답변2
컴퓨터가 부팅될 때 실행하려면 다음 폴더 중 하나에 .exe를 놓습니다. 작업 스케줄러에서는 아무 것도 할 필요가 없습니다.
현재 사용자의 경우:
C:\Users\사용자 이름\AppData\Roaming\Microsoft\Windows\시작 메뉴\프로그램\시작
모든 사용자의 경우:
C:\ProgramData\Microsoft\Windows\시작 메뉴\프로그램\시작
도움이 되었기를 바랍니다!