2011-08-17 7 views
6

Ho un file batch che modifica la variabile PATH anteponendo alcuni indirizzi. Quando l'utente si collega, quindi, PATH viene ripristinato al valore originale (prima che il file batch sia mai stato eseguito). Questo comportamento è OK.CMD di Windows: reimpostare la variabile del percorso dal file batch?

Tuttavia, se il file batch viene eseguito più di una volta, gli stessi valori vengono preposti nuovamente e alla fine si ottiene una variabile PATH ridondante troppo lunga che diventa più lunga dopo ogni esecuzione di un batch.

Desidero reimpostare la variabile su qualunque esso sia quando l'utente accede, prima che i valori siano anteposti. Immagino che la soluzione sia scrivere il valore originale in un file temporaneo e leggerlo di nuovo, ma c'è un modo migliore per farlo?

risposta

6

Piuttosto che scrivere il valore originale in un file temporaneo, si potrebbe scrivere a un altro variabile d'ambiente:

if not defined ORIGINAL-PATH set ORIGINAL-PATH=%PATH% 
set PATH=c:\extra\stuff;%ORIGINAL-PATH% 

ma sarebbe meglio controllare in modo esplicito se la stringa che si desidera è in PATH già o no , come questo:

echo %PATH% | findstr /c:"c:\extra\stuff;" > nul || set PATH=c:\extra\stuff;%PATH% 
+0

Questo è in realtà ciò che ho finito per fare. Grazie! – Ben

+0

Questo ha l'ulteriore vantaggio di rovinare le "cose ​​extra" ... puoi aggiustarlo. Ho dimenticato il trailing "\" quando l'ho fatto per la prima volta. Grazie per il consiglio semplice ma efficace! – granadaCoder

6

Inserire @SETLOCAL nella parte superiore del file batch.

Eventuali modifiche apportate all'ambiente verranno ripristinate quando il file batch verrà chiuso.

Eseguire setlocal /? per ulteriori dettagli.

1

Sono stato alla ricerca di una soluzione per lungo tempo per un problema simile. Alla fine ho finito per usare il pathmgr.cmd che ho scaricato da:

http://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e

Per usarlo per pulire il PATH dell'utente, le opzioni di seguito possono essere utilizzati da linea di comando:

pathmgr.cmd/clean/user/p/y

Sono disponibili anche molte altre opzioni utili.

Problemi correlati