Dostęp do zmiennych środowiskowych w zaplanowanym zadaniu

13

Podczas konfigurowania zaplanowanego zadania w sekcji akcji próbuję uzyskać dostęp do zmiennej środowiskowej dla lokalizacji pliku wykonywalnego, który chcę uruchomić. Wynika to głównie z tego, że na jednym komputerze plik wykonywalny może znajdować się w C: na innym może to być D: Sprawdziłem, że jeśli użyję zakodowanej ścieżki, moje zaplanowane zadanie zostanie uruchomione, ale jeśli zmienię akcję tak, aby wskazywała "%MyAppPath%\MyApp.exe"na zadanie nie zacznie odczuwać niepowodzenia uruchamiania. Sprawdziłem, czy zmienna środowiskowa jest skonfigurowana.

Czy możliwe jest odwołanie do zmiennej środowiskowej w części akcji (i katalogu roboczego) harmonogramu zadań - czy moja składnia jest nieprawidłowa?

Na marginesie, pomyślałem o wywołaniu pliku BAT i odwołaniu się do zmiennej środowiskowej, ale to nic nie rozwiązuje, ponieważ głównym problemem jest to, czy aplikacja (i plik nietoperza) znajduje się na C: lub D: napędy - w samym napędzie ścieżka jest taka sama.

AKTUALIZACJA : Okazuje się, że można ich używać przy ponownym uruchomieniu komputera, ale być może istnieje lepszy sposób

Paul Hadfield
źródło

Odpowiedzi:

21

Nie potrzebujesz restartu komputera. Powinieneś zakończyć Taskeng.exe, a przy następnym uruchomieniu zaplanowanego zadania otrzyma zaktualizowane środowisko.

tsvayer
źródło
Dziękuję bardzo mcuh! Walczyłem z tym od wielu dni. Próbowałem zrestartować usługę Scheduler bezskutecznie w Win7 / Win2008 (trzeba uruchomić jako SYSTEM, aby ją zrestartować), ale jest to o wiele prostsze!
Timur
2

Myślałem, że możesz odwoływać się do zmiennych środowiskowych z Harmonogramu zadań, ale po wypróbowaniu nie wygląda to tak, jak możesz.

Wydaje się, że jedynym wyjątkiem jest %PATH%dodanie MyAppPathwartości do %PATH%kolekcji na każdym komputerze, a następnie po prostu wywołanie MyApp.exez harmonogramu zadań, gdzie maszyna będzie w stanie rozwiązać w pełni kwalifikowaną ścieżkę zgodnie z wymaganiami?

Stuart McLaughlin
źródło
1
Interesujące, właśnie próbowałem z% PATH% i nie mogłem go uruchomić. W tym momencie zauważyłem głupią literówkę, kiedy zaktualizowałem% PATH%. Naprawiłem literówkę i sprawdziłem, czy PATH jest OK w polu DOS, ale zaplanowane zadanie nadal zgłosiło problem - wskazując, że widzi „złą” wersję% PATH%. Ponowne uruchomienie było konieczne, aby odebrać zmianę (ponieważ nie można ponownie uruchomić harmonogramu zadań). W tym momencie okazało się, że mogę teraz używać mojej oryginalnej zmiennej środowiskowej. Rezultatem jest to, że możesz używać zmiennych środowiskowych, ale potrzebny jest pełny restart komputera, aby wykryć wszelkie zmiany / nowe zmienne środowiskowe
Paul Hadfield
Oznacz to jako odpowiedź, ponieważ masz rację, że możesz ich użyć, ale jeśli harmonogram zadań został uruchomiony przed zmodyfikowaniem zadania / dodaniem odwołania do zmiennej środowiskowej, konieczne będzie ponowne uruchomienie komputera.
Paul Hadfield
2
Zobacz odpowiedź tsvayera - nie musisz ponownie uruchamiać komputera. Po prostu proces harmonogramu zadań.
Ben Challenor,
1

Na marginesie, pomyślałem o wywołaniu pliku BAT i odwołaniu się do zmiennej środowiskowej, ale to nic nie rozwiązuje, ponieważ głównym problemem jest to, czy aplikacja (i plik nietoperza) znajduje się na C: lub D: napędy - w samym napędzie ścieżka jest taka sama.

%~d0rozwinie się do litery dysku, na której znajduje się plik wsadowy. ( %~dp0dla katalogu dysk + itd. )

grawitacja
źródło
1

Odpowiedź tsvayera nie zadziałała dla mnie na komputerze z systemem Windows 7, ale wskazała mi właściwy kierunek. Harmonogram zadań wydaje się być usługą na moim komputerze; nazywa się Schedule; wyświetlana nazwa to Harmonogram zadań .

Oprócz zrestartowania go z MMC usług , można go zrestartować za pomocą następujących wmicpoleceń uruchomionych z okna wiersza polecenia (z uprawnieniami administratora):

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

Możesz oczywiście zrestartować usługę, używając sc:

sc stop Schedule
sc start Schedule

Na podstawie prób i błędów wydaje się, że wystarczy wyłączyć, a następnie ponownie włączyć pojedyncze zadanie, jeśli to wszystko, co musisz zmienić:

schtasks /Change /TN \"The name of the task\" /DISABLE
schtasks /Change /TN \"The name of the task\" /ENABLE
Kenny Evitt
źródło
0

Na marginesie, pomyślałem o wywołaniu pliku BAT i odwołaniu się do zmiennej środowiskowej, ale to nic nie rozwiązuje, ponieważ głównym problemem jest fakt, czy aplikacja (i plik nietoperza) znajduje się na C: lub D: napędy - w samym napędzie ścieżka jest taka sama.

Rozwijając odpowiedź grawitacji, korzystam z dwuetapowego procesu. Pozwala mi to na użycie ścieżki w innych instrukcjach, gdy jest to potrzebne.

SET WD=%~dp0
pushd %WD%

UWAGA: pushdzmienia zarówno dysk, jak i katalog. A jeśli chcesz być czysty, popdkiedy skończysz.

Richard
źródło