Come impostare in modo persistente una variabile in Windows 7 da un file batch?

Sto cercando di impostare la variabile d’ambiente PATH in Windows 7 usando un bat-file; tuttavia non sembra funzionare.

Sto usando questo comando di windows:

set PATH=%cd%;%path% pause 

Tuttavia sembra solo essere valido per questa istanza di cmd. Voglio che sia permanente, dal momento che ho prima impostato il PERCORSO e quindi eseguire un programma che ha bisogno di individuare le librerie in quella cartella.

Usa setx.exe invece di set.

 setx PATH "%cd%;%path%;" pause 

Si noti che questo imposta il percorso per tutte le future istanze di cmd, ma non per quella corrente. Se necessario, esegui anche il comando set originale.

UPDATE: il secondo parametro deve essere quotato se contiene spazi (che% path% ha sempre). Tieni presente che se l’ultimo carattere nel tuo% path% è un backslash, sfuggirà alla citazione finale e l’ultima voce del percorso smetterà di funzionare. Mi aggiro aggiungendo un punto e virgola prima della citazione di chiusura.

Se non vuoi rischiare di ottenere “;;;;;;” alla fine del percorso dopo ripetute esecuzioni, quindi rimuovi la barra rovesciata finale dalla variabile% path% prima dell’impostazione, e funzionerà correttamente.

Se si desidera eseguirlo in un file batch, utilizzare il comando reg per modificare il valore del percorso nel registro nella chiave HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment.

Qualcosa di simile a:

 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath" 

Verifica che il percorso nella variabile% path% corrisponda al percorso di sistema.

Come notò Wizlb, facendo

 setx PATH "%cd%;%path%;" -m 

copierà env locale su system env, e senza -m copierà system env su user env. Né è desiderabile. Per modificare accuratamente solo una parte del registro (sistema o utente, sistema nel mio esempio di seguito) è necessario eseguire questa operazione:

 for /F "tokens=2* delims= " %%f IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g setx.exe PATH "%OLD_SYSTEM_PATH%;%OTHER_STUFF%;" -m 

Il merito della soluzione è http://www.robvanderwoude.com/ntregistry.php

Per fare ciò correttamente penso che sia davvero necessario andare oltre un semplice file batch. La documentazione MSDN afferma:

Per aggiungere o modificare a livello di programmazione le variabili di ambiente del sistema, aggiungerle alla chiave di registro HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment , quindi trasmettere un messaggio WM_SETTINGCHANGE con lParam impostato sulla stringa “Ambiente”. Ciò consente alle applicazioni, come la shell, di raccogliere gli aggiornamenti.

Prima di tutto non sarai in grado di scrivere su quella chiave senza un prompt di elevazione UAC. È meglio sistemarlo aggiungendo il manifest appropriato a un file eseguibile. In secondo luogo, la trasmissione di WM_SETTINGCHANGE non è semplice da un file batch.

Nella tua posizione, scriverei un’app console semplice e corta per fare il lavoro.

Una soluzione semplice (potrebbe essere meglio) consiste nell’utilizzare PathMgr.cmd

Giù il pathmgr_1.0.2.zip in https://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e

Decomprimere e inserire il pathmgr.cmd nella stessa cartella del file batch, quindi nel file batch scrivere queste due righe:

 call pathmgr.cmd /del %cd% /y call pathmgr.cmd /add %cd% /y 

Questo sarà:

1) aggiorna solo la variabile utente PATH, 2) non includerà il PATH di sistema più volte

È inoltre ansible eseguire il file batch più volte e includerà solo il percorso corrente UNA VOLTA nel PERCORSO.

Supponendo che voglio creare una variabile di ambiente di sistema chiamata “ZIP_PROGRAM” e voglio puntarla all’eseguibile nel percorso “reg aggiungere C: \ Programmi \ 7-Zip \ 7z.exe

Eseguirò il seguente al prompt di DOS:

Passaggio 1: eseguire il seguente codice reg aggiungere “HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment” / v ZIP_PROGRAM / t REG_SZ / d “C: \ Programmi \ 7-Zip \ 7z.exe” / f

Passaggio 2: disconnetti, quindi accedi

Passo 3: Apri il prompt DOS ed esegui: “set z” e dovresti essere in grado di vedere l’aggiornamento della variabile di ambiente

Usa questo comando setx PATH “% PATH%;% MVN_HOME% \ bin \”

Comunque non sarà impostato nella sessione corrente che è necessario utilizzare

imposta PATH = “% PATH%;% MVN_HOME% \ bin \”