CMD: An Pfad anhängen, ohne ihn zu duplizieren?

CMD: An Pfad anhängen, ohne ihn zu duplizieren?

Für eine CMDSitzung kann ich ganz einfach einen neuen Pfad festlegen:SET PATH=%PATH%;"insert custom path here"

Wenn Sie dies in einer Batchdatei tun, wird nicht berücksichtigt, ob der benutzerdefinierte Pfad bereits enthalten ist. Wie vermeide ich eine Duplizierung (d. h. prüfe, ob er bereits in der PATH-Zeichenfolge enthalten ist)?

Bemerkungen:

  1. Verwandt:Wie füge ich benutzerdefinierte Umgebungsvariablen an die Systemvariable PATH in Windows 7 an?
  2. Verwandt:Wie kann ich über die Befehlszeile einen Eintrag dauerhaft an die PATH-Variable des Systems anhängen?
  3. Dieselbe Frage für UNIX:Verzeichnis zu $PATH hinzufügen, falls es dort noch nicht vorhanden ist
  4. Erläuterung einiger „CMD“-String-Operationen:http://ss64.com/nt/syntax-replace.html

Antwort1

Ähnlich wie die Antwort von MaddHackers, nur kompakter.
echo %path%|find /i "%np%">nul || set path=%path%;%np%

%np%ist Ihr neuer Pfad, Sie können natürlich auch Literale verwenden. Was es tut: echo %path%|find /i "%np%">nulDurchsucht den vorhandenen Pfad nach einer Zeichenfolge und verwirft die Ausgabe. ||bedeutet „Ausführen bei Fehler“, also bedeutet es: Durchsuchen Sie den Pfad nach der hinzuzufügenden Zeichenfolge und fügen Sie sie hinzu, wenn sie nicht gefunden wird.

Edit: Im Allgemeinen ist es nicht erforderlich, Pfade in Anführungszeichen zu setzen, auch solche mit Leerzeichen, aberwenn Sie sie zitieren möchten, diese Version funktioniert mit Pfaden in doppelten Anführungszeichen:
echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%

Bearbeiten: geändert, findstr /i /c:da einige Sequenzen möglicherweise falsch interpretiert werden, wie von KubaOber in den Kommentaren find /iangemerktfindstr

Antwort2

Ich weiß, es ist schmutzig, aber das sollte funktionieren:

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

wobei %checkstr%die Zeichenfolge ist, nach der im Pfad gesucht werden soll, und %newpath%der neue Pfad ist, der an den aktuellen Pfad angehängt werden soll.

Ich hoffe, das hilft. Ich bin sicher, dass es einen einfacheren Weg gibt, aber das sollte fürs Erste reichen.

BEARBEITEN

Wenn Sie die UNIX-Tools nicht zu Windows hinzufügen möchten, können Sie diese Batch-Syntax ausprobieren:

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

Ugh, nicht gerade schöner, und kann in einer Zeile erledigt werden, wenn Sie es schaffen, den piped-Befehl „find“ als Unterbefehl in der „if“-Anweisung zum Laufen zu bringen …

Antwort3

Skript basierend auf der Antwort von „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

Antwort4

Aktualisierte Antwort für 2021:

setfunktioniert nicht mehr und wir müssen setx(etwas andere Syntax) verwenden:

SET mypath=C:\dev\vendor\sass\1.32.4
ECHO %Path%|findstr /i /c:"%mypath:"=%">nul || setx Path "%Path%";%mypath%

verwandte Informationen