CMD: Aggiungi al percorso senza duplicarlo?


12

Per una CMDsessione posso facilmente impostare un nuovo percorso:SET PATH=%PATH%;"insert custom path here"

Farlo in un file batch non considera se il percorso personalizzato è già incluso. Come evitare di duplicarlo (ovvero verificare se è già contenuto nella "stringa" PATH).

Osservazioni:

  1. Correlati: Come aggiungere variabili di ambiente definite dall'utente al PATH delle variabili di sistema in Windows 7?
  2. Correlati: Come posso aggiungere permanentemente una voce nella variabile PATH del sistema, tramite riga di comando?
  3. Stessa domanda per UNIX: aggiungi la directory a $ PATH se non è già lì
  4. Spiegazione di alcune operazioni sulla stringa "CMD": http://ss64.com/nt/syntax-replace.html

Va sottolineato che in questo contesto la duplicazione è innocua. Probabilmente sarebbe più sensato consentire la duplicazione piuttosto che cercare di evitarlo e introdurre il rischio di un falso positivo.
Harry Johnston,

Risposte:


14

Simile alla risposta di MaddHackers, solo più compatto.
echo %path%|find /i "%np%">nul || set path=%path%;%np%

%np%è il tuo nuovo percorso, ovviamente puoi usare invece i letterali. Cosa fa: echo %path%|find /i "%np%">nulcerca una stringa esistente nel percorso, scartando l'output. ||significa eseguire in caso di errore, quindi significa: Cerca il percorso per la stringa da aggiungere e, se non viene trovata, aggiungila.

Modifica: in genere non è necessario citare i percorsi, anche quelli contenenti spazi, ma se si desidera citarli , questa versione funzionerà con percorsi a virgolette doppie:
echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%

Modifica: modificato findstr /i /c:in find /icome findstrpotrebbe interpretare erroneamente alcune sequenze come notato da KubaOber nei commenti


Bene, sapevo che c'era un modo più pulito per farlo ... preferisco ancora bash, ma sono solo io: D Grazie per l'aiuto!
MaddHacker,

Bello, ma funziona con gli spazi nel percorso? L'ho provato con i miei percorsi particolari, quello "citato e con spazi" viene aggiunto di nuovo. Uno appena citato ma nessuno spazio sembra funzionare.
Horst Walter,

1
@HorstWalter Sì, dovrebbe funzionare con qualsiasi percorso (ho appena controllato con alcuni spazi inclusi). Cosa intendi con "citato"? Non è necessario utilizzare le virgolette nei percorsi, anche quelli contenenti spazi. Se le %np%virgolette contengono: sì, si comporterà un comportamento anomalo.
wmz,

2
@HorstWalter Vedi la mia modifica. Questo è solo un problema se usi la variabile, usare letterali (come in echo %path%|findstr /i /c:"my path">nul || set path=%path%;"my path") dovrebbe funzionare bene.
wmz,

1
@wmz echo d\. | findstr /c:"d\."fallisce, ma echo d\. | find "d\."riesce
Ripristina Monica il

4

So che è sporco, ma dovrebbe funzionare:

 SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')

dove si %checkstr%trova la stringa da controllare nel PERCORSO ed %newpath%è il nuovo PERCORSO da aggiungere al PERCORSO corrente

Spero che sia d'aiuto, e sono sicuro che ci sia un modo più semplice, ma per il momento dovrebbe fare il trucco.

MODIFICARE

Quindi, se non si desidera aggiungere gli strumenti UNIX a Windows, è possibile provare questa sintassi batch:

echo %PATH% | find /C /I "<string to find>" > out.txt 
set /p dne= < out.txt
if 0 EQU %dne% (set PATH=%PATH%;"<custom path>")
del out.txt

Uff, non più carino, e può essere fatto come una riga se riesci a far funzionare il comando pipe'ed find come sottocomando nell'istruzione if ...


2

Script basato sulla risposta di "wmz":

@ECHO off
ECHO java_home=%JAVA_HOME%
SET javapath=%JAVA_HOME%\bin
ECHO %path%|findstr /i /c:"%javapath:"=%">nul || set path=%path%;%javapath%
ECHO Path=%path%
PAUSE
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.