Accesso alle variabili di ambiente in un'attività pianificata


14

Quando si imposta un'attività pianificata, per la sezione azione sto tentando di accedere a una variabile di ambiente per la posizione dell'eseguibile che desidero eseguire. Questo principalmente perché su un computer l'eseguibile potrebbe trovarsi in C: su un altro potrebbe essere in D: ho verificato che se utilizzo un percorso con codice fisso la mia attività pianificata viene eseguita, ma se cambio l'azione per puntare "%MyAppPath%\MyApp.exe"all'attività non inizierà a subire un fallimento nel lancio. Ho verificato che la variabile di ambiente è impostata.

È anche possibile all'interno dell'azione (e della directory di lavoro) parte della pianificazione delle attività fare riferimento a una variabile di ambiente? La mia sintassi è errata?

In una nota a margine, ho pensato di chiamare un file BAT e fare riferimento alla variabile di ambiente lì, ma ciò non risolve nulla per me poiché il problema principale è in realtà sapere se l'applicazione (e anche il file bat) è su C: oppure D: drives - all'interno del drive stesso il percorso è lo stesso.

AGGIORNAMENTO : Si scopre che puoi usarli con un riavvio della macchina, ma forse c'è un modo migliore

Risposte:


23

Non è necessario un riavvio della macchina. È necessario terminare Taskeng.exe e alla successiva esecuzione dell'attività pianificata otterrà un ambiente aggiornato.


Grazie mille mcuh! Ho lottato con esso per giorni. Ho provato a riavviare il servizio Scheduler senza alcun risultato in Win7 / Win2008 (è necessario eseguire come SISTEMA per riavviarlo), ma è molto più semplice!
Timur,

2

Pensavo che potessi fare riferimento alle variabili di ambiente dall'Utilità di pianificazione, ma avendo appena provato, non sembra che tu possa.

L'unica eccezione sembra essere %PATH%quindi sarebbe possibile aggiungere il MyAppPathvalore alla %PATH%raccolta su ogni macchina, quindi chiamare semplicemente dall'utilità MyApp.exedi pianificazione, dove la macchina sarà in grado di risolvere il percorso completo come richiesto?


1
Interessante, ho appena provato con% PATH% e non sono riuscito a farlo funzionare. A quel punto ho notato un errore di battitura stupido quando ho aggiornato% PATH%. Ho risolto l'errore di battitura e verificato che PATH era OK in una casella DOS, ma l'attività programmata riportava ancora il problema, indicando che stava vedendo la versione "errata" di% PATH%. Il riavvio è stato necessario per raccogliere la modifica (poiché non è possibile riavviare l'utilità di pianificazione). A quel punto si è scoperto che ora potevo usare la mia variabile d'ambiente originale. Quindi il risultato è che è possibile utilizzare le variabili di ambiente, ma è necessario un riavvio completo della macchina per rilevare eventuali modifiche / nuove variabili di ambiente
Paul Hadfield,

Contrassegnerà questa come risposta poiché era corretto poterle utilizzare ma se l'utilità di pianificazione è stata eseguita prima di aver modificato il lavoro / aggiunto il riferimento a una variabile di ambiente, sarà necessario riavviare il computer.
Paul Hadfield,

2
Vedi la risposta di tsvayer: non è necessario riavviare il computer. Solo il processo dell'utilità di pianificazione.
Ben Challenor,

1

In una nota a margine, ho pensato di chiamare un file BAT e fare riferimento alla variabile di ambiente lì, ma ciò non risolve nulla per me poiché il problema principale è in realtà sapere se l'applicazione (e anche il file bat) è su C: oppure D: drives - all'interno del drive stesso il percorso è lo stesso.

%~d0si espanderà alla lettera dell'unità in cui si trova il file batch. ( %~dp0per drive + directory e così via. )


1

La risposta di tsvayer non ha funzionato per me, su un computer con Windows 7, ma mi ha indicato la giusta direzione. L'Utilità di pianificazione sembra essere un servizio sul mio computer; il suo nome è Schedule; il nome visualizzato è Utilità di pianificazione .

Oltre a riavviarlo da MMC Servizi , può essere riavviato con i seguenti wmiccomandi eseguiti da una finestra del prompt dei comandi (con privilegi di amministratore):

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

Ovviamente puoi anche riavviare il servizio usando sc:

sc stop Schedule
sc start Schedule

In base a tentativi ed errori, sembra sufficiente disabilitare e riattivare una singola attività, se è tutto ciò che serve per influenzare:

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

0

In una nota a margine, ho pensato di chiamare un file BAT e fare riferimento alla variabile di ambiente lì, ma ciò non risolve nulla per me poiché il problema principale è in realtà sapere se l'applicazione (e anche il file bat) è su C: oppure D: drives - all'interno del drive stesso il percorso è lo stesso.

Espandendo la risposta di Grawity, utilizzo un processo in due fasi. Questo mi consente di utilizzare il percorso in altre istruzioni quando necessario.

SET WD=%~dp0
pushd %WD%

NOTA: pushdcambia sia l'unità che la directory. E se volevi essere pulito, popdquando hai finito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.