Auf Umgebungsvariablen in einer geplanten Task zugreifen

14

Beim Einrichten einer geplanten Aufgabe versuche ich, für den Aktionsabschnitt auf eine Umgebungsvariable für den Speicherort der ausführbaren Datei zuzugreifen, die ich ausführen möchte. Dies liegt hauptsächlich daran, dass sich die ausführbare Datei auf einem Computer in C befinden könnte: auf einem anderen Computer in D: Ich habe überprüft, ob meine geplante Aufgabe ausgeführt wird, wenn ich einen fest codierten Pfad verwende, aber wenn ich die Aktion ändere, um auf "%MyAppPath%\MyApp.exe"die Aufgabe zu verweisen wird keinen Startfehler erleiden. Ich habe überprüft, dass die Umgebungsvariable eingerichtet ist.

Ist es überhaupt möglich, im Aktions- (und Arbeitsverzeichnis-) Teil des Aufgabenplans auf eine Umgebungsvariable zu verweisen - ist meine Syntax falsch?

Nebenbei bemerkt, ich habe darüber nachgedacht, eine BAT-Datei aufzurufen und die Umgebungsvariable dort zu referenzieren, aber das löst für mich nichts, da das Hauptproblem tatsächlich bekannt ist, ob sich die Anwendung (und auch die bat-Datei) auf C befindet: oder D: drives - innerhalb des Laufwerks ist der Pfad derselbe.

UPDATE : Es hat sich herausgestellt, dass Sie sie für einen Neustart des Computers verwenden können, aber vielleicht gibt es einen besseren Weg

Paul Hadfield
quelle

Antworten:

23

Sie müssen den Computer nicht neu starten. Sie sollten Taskeng.exe beenden, und wenn der nächste geplante Task ausgeführt wird, wird die Umgebung aktualisiert.

tsvayer
quelle
Danke so mcuh! Ich habe seit Tagen damit zu kämpfen. Ich habe versucht, den Scheduler-Dienst in Win7 / Win2008 ohne Erfolg neu zu starten (muss als SYSTEM ausgeführt werden, um ihn neu zu starten), aber das ist viel einfacher!
Timur
2

Ich dachte, Sie könnten auf Umgebungsvariablen aus dem Taskplaner verweisen, aber nachdem Sie es gerade versucht haben, sieht es nicht so aus, als könnten Sie es.

Die einzige Ausnahme scheint zu sein: %PATH%Wäre es möglich, Ihren MyAppPathWert der %PATH%Sammlung auf jedem Computer hinzuzufügen und dann einfach MyApp.exeüber den Taskplaner aufzurufen , wo der Computer den vollständig qualifizierten Pfad nach Bedarf auflösen kann?

Stuart McLaughlin
quelle
1
Interessant, ich habe es gerade mit% PATH% versucht und konnte es nicht zum Laufen bringen. Zu diesem Zeitpunkt bemerkte ich einen dummen Tippfehler, als ich% PATH% aktualisiert hatte. Ich habe den Tippfehler behoben und sichergestellt, dass PATH in einer DOS-Box in Ordnung ist, aber der geplante Task hat das Problem weiterhin gemeldet - was darauf hinweist, dass die "schlechte" Version von% PATH% angezeigt wird. Ein Neustart war erforderlich, um die Änderung zu übernehmen (da Sie den Taskplaner nicht neu starten können). Zu diesem Zeitpunkt stellte sich heraus, dass ich jetzt meine ursprüngliche Umgebungsvariable verwenden konnte. Das Fazit ist also, dass Sie Umgebungsvariablen verwenden können, aber ein vollständiger Neustart des Computers ist erforderlich, um alle Änderungen / neuen Umgebungsvariablen zu übernehmen
Paul Hadfield,
Markiert dies als die Antwort, da Sie richtig waren, dass Sie sie verwenden können. Wenn der Taskplaner jedoch ausgeführt wurde, bevor Sie den Job geändert oder den Verweis auf eine Umgebungsvariable hinzugefügt haben, muss der Computer neu gestartet werden.
Paul Hadfield
2
Siehe die Antwort von tsvayer - Sie müssen den Computer nicht neu starten. Nur der Taskplaner-Prozess.
Ben Challenor
1

Nebenbei bemerkt, ich habe darüber nachgedacht, eine BAT-Datei aufzurufen und die Umgebungsvariable dort zu referenzieren, aber das löst für mich nichts, da das Hauptproblem tatsächlich bekannt ist, ob sich die Anwendung (und auch die bat-Datei) auf C befindet: oder D: drives - innerhalb des Laufwerks ist der Pfad derselbe.

%~d0wird auf den Laufwerksbuchstaben der Batchdatei erweitert. ( %~dp0für Laufwerk + Verzeichnis usw. )

user1686
quelle
1

Die Antwort von tsvayer hat auf einem Computer mit Windows 7 nicht ganz funktioniert, aber sie hat mich in die richtige Richtung gelenkt . Der Taskplaner scheint ein Dienst auf meinem Computer zu sein. es heißt Schedule; Der Anzeigename lautet Task Scheduler .

Neben dem Neustart über die Dienste- MMC können die folgenden wmicBefehle in einem Eingabeaufforderungsfenster ausgeführt werden (mit Administratorrechten):

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

Sie können den Dienst natürlich auch neu starten, indem Sie Folgendes verwenden sc:

sc stop Schedule
sc start Schedule

Basierend auf Versuchen und Irrtümern scheint es ausreichend zu sein, eine einzelne Aufgabe zu deaktivieren und dann wieder zu aktivieren, wenn dies alles ist, was Sie bewirken müssen:

schtasks /Change /TN \"The name of the task\" /DISABLE
schtasks /Change /TN \"The name of the task\" /ENABLE
Kenny Evitt
quelle
0

Nebenbei bemerkt, ich habe darüber nachgedacht, eine BAT-Datei aufzurufen und dort auf die Umgebungsvariable zu verweisen, aber das löst für mich nichts, da das Hauptproblem darin besteht, zu wissen, ob sich die Anwendung (und auch die bat-Datei) auf C befindet: oder D: drives - innerhalb des Laufwerks ist der Pfad derselbe.

Um auf die Antwort von Grawity einzugehen, benutze ich einen zweistufigen Prozess. Dadurch kann ich den Pfad bei Bedarf in anderen Anweisungen verwenden.

SET WD=%~dp0
pushd %WD%

HINWEIS: pushdÄndert sowohl das Laufwerk als auch das Verzeichnis. Und wenn Sie sauber sein wollen, popdwenn Sie fertig sind.

Richard
quelle