예약 된 작업에서 환경 변수에 액세스


14

예약 된 작업을 설정할 때 작업 섹션에서 실행하려는 실행 파일의 위치에 대한 환경 변수에 액세스하려고합니다. 서로가 D에있을 수 : 나는 하드 코드 경로 내 예약 된 작업 실행을 사용하는 경우,하지만 난에 포인트 동작을 변경하면 것을 확인했습니다 하나 개의 시스템에 실행 파일이 C에있을 수 있습니다 주로 때문입니다 "%MyAppPath%\MyApp.exe"작업 발사 실패로 시작하지 않습니다. 환경 변수가 설정되어 있는지 확인했습니다.

작업 일정의 작업 (및 작업 디렉토리) 내부에서 환경 변수를 참조하는 것이 가능합니까? 내 구문이 잘못되었습니다.

참고로, BAT 파일을 호출하고 거기에서 환경 변수를 참조하는 것에 대해 생각했지만 주된 문제는 실제로 응용 프로그램 (및 bat 파일도)이 C에 있는지 여부를 알고 있기 때문에 아무것도 해결되지 않습니다. 또는 D : 드라이브-드라이브 자체의 경로는 동일합니다.

업데이트 : 컴퓨터를 재부팅 할 때 사용할 수 있지만 더 좋은 방법이있을 수 있습니다.

답변:


23

머신을 재부팅 할 필요는 없습니다. Taskeng.exe를 종료해야하며 다음에 예약 된 작업이 실행될 때 업데이트 된 환경이 제공됩니다.


정말 고마워요! 나는 며칠 동안 어려움을 겪었습니다. Win7 / Win2008에서 Scheduler 서비스를 다시 시작하려고 시도했지만 다시 시작하려면 SYSTEM으로 실행해야하지만 훨씬 간단합니다!
Timur

2

작업 스케줄러에서 환경 변수를 참조 할 수 있다고 생각했지만 방금 시도했지만 시도한 것처럼 보이지 않습니다.

한 가지 예외 는 각 시스템 의 컬렉션에 값 %PATH%을 추가 한 다음 작업 스케줄러에서 호출 하면 시스템이 필요에 따라 정규화 된 경로를 확인할 수 있습니까?MyAppPath%PATH%MyApp.exe


1
흥미롭게도 방금 % PATH %로 시도했지만 작동하지 못했습니다. 그 시점에서 % PATH %를 업데이트했을 때 바보 같은 오타가 나타났습니다. 오타를 수정하고 DOS 상자에서 PATH가 정상임을 확인했지만 예약 된 작업이 여전히 문제를보고했습니다. % PATH %의 "잘못된"버전을보고 있음을 나타냅니다. 작업 스케줄러를 다시 시작할 수 없으므로 변경 사항을 적용하려면 재부팅해야했습니다. 그 시점에서 이제 원래 환경 변수를 사용할 수 있습니다. 결론적 당신이 사용할 수 있다는 것입니다 그래서 환경은 variablees하지만, 전체 시스템을 다시 부팅 변경 / 새로운 환경 변수를 데리러 필요
폴 Hadfield의

이것을 사용할 수있는 정확한 대답으로 표시합니다. 그러나 작업을 수정하기 전에 작업 스케줄러가 실행되었거나 환경 변수에 참조를 추가 한 경우 시스템을 재부팅해야합니다.
Paul Hadfield

2
tsvayer의 답변을 참조하십시오-컴퓨터를 재부팅 할 필요가 없습니다. 작업 스케줄러 프로세스 만
벤 Challenor

1

참고로, BAT 파일을 호출하고 거기에서 환경 변수를 참조하는 것에 대해 생각했지만 주된 문제는 실제로 응용 프로그램 (및 bat 파일도)이 C에 있는지 여부를 알고 있기 때문에 아무것도 해결되지 않습니다. 또는 D : 드라이브-드라이브 자체의 경로는 동일합니다.

%~d0배치 파일이있는 드라이브 문자로 확장됩니다. ( %~dp0드라이브 + 디렉토리, 등등. )


1

tsvayer의 대답 은 Windows 7을 실행하는 컴퓨터에서 제대로 작동하지 않았지만 올바른 방향으로 나를 가리 켰습니다. 작업 스케줄러 는 내 컴퓨터의 서비스 인 것 같습니다. 이름은 Schedule; 표시 이름은 작업 스케줄러 입니다.

서비스 MMC 에서 다시 시작하는 것 외에도 wmic관리자 권한으로 명령 프롬프트 창에서 다음 명령을 실행 하여 다시 시작할 수 있습니다 .

wmic service where "name='Schedule'" call StopService
wmic service where "name='Schedule'" call StartService

물론 다음을 사용하여 서비스를 다시 시작할 수도 있습니다 sc.

sc stop Schedule
sc start Schedule

시행 착오를 바탕으로 단일 작업을 비활성화했다가 다시 활성화하면 충분합니다.

schtasks /Change /TN \"The name of the task\" /DISABLE
schtasks /Change /TN \"The name of the task\" /ENABLE

0

참고로, BAT 파일을 호출하고 거기에서 환경 변수를 참조하는 것에 대해 생각했지만 주된 문제는 실제로 응용 프로그램 (및 bat 파일도)이 C에 있는지 여부를 알고 있기 때문에 아무것도 해결되지 않습니다. 또는 D : 드라이브-드라이브 자체의 경로는 동일합니다.

grawity의 답변을 확장하면서 2 단계 프로세스를 사용합니다. 이를 통해 필요할 때 다른 문장에서 경로를 사용할 수 있습니다.

SET WD=%~dp0
pushd %WD%

참고 : pushd드라이브와 디렉토리를 모두 변경하십시오. 그리고 popd당신이 깨끗하고 싶었 으면 끝났을 때.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.