Ich möchte die Windows PATH-Variable mit ändern setx
. Folgendes funktioniert unter Windows 8 mindestens 50% der Zeit:
setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\
Wenn der Fehler "Das Standardargument kann nur zweimal verwendet werden" angezeigt wird, funktioniert das Folgende manchmal:
setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\"
Der Unterschied besteht darin, dass wir das zweite Argument in Anführungszeichen gesetzt haben. Ich glaube, die Anführungszeichen sind notwendig, wenn %PATH%
sie um Leerzeichen erweitert werden.
Unter Windows 7 sind jedoch einige seltsame Probleme aufgetreten. Auf einem bestimmten Windows 7-Computer hatte ich dieses Problem:
echo %PATH%
Es druckt:
C:\Foo\;C:\Bar\;[...lots of stuff...]C:\Baz\
Dann mache ich das:
setx PATH "%PATH%;C:\Quux\"
Dann heißt es "Fehler: Bei 1.024 Zeichen abgeschnitten." Lassen Sie uns nun überprüfen, was PATH enthält:
echo %PATH%
Es druckt:
C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...lots of stuff, now duplicated...]C:\B
... und es ist bei 1.024 Zeichen abgeschnitten. Es lief wegen der Duplikate über. Ebenfalls interessant: Der Wert von PATH ändert sich trotz der Tatsache, dass setx
ein Fehler aufgetreten ist und nicht "Erfolg" gesagt wurde.
Ich konnte dieses seltsame Verhalten mehrmals wiederholen (zum Glück hatte ich den ursprünglichen Inhalt von PATH gespeichert).
Im Moment ist der einzige todsichere Weg, den PATH anzuhängen, der folgende:
echo
der Weg.Kopieren Sie den Inhalt von PATH in eine Textdatei und fügen Sie ihn manuell
;C:\Python27\;C:\Python27\Scripts\
am Ende des PATH hinzu.Kopieren Sie das Ganze aus der Textdatei.
setx PATH "<paste the string here>"
Dieser Vorgang funktioniert jedes Mal unter Windows 7 und Windows 8.
Ich sollte das wirklich in einem Befehl tun können. Was mache ich falsch?
Vielen Dank.
setx
ist aus einem anderen Grund gefährlich: Wenn der Pfad Umgebungsvariablen enthält, z. B. geht%JAVADIR%\bin
die Referenz verloren, dh wenn sich JAVADIR ändert, ändert sich der Pfad nicht mehr mit. Wenn es sich um ein Software-Installationsprogramm handelt, können die Computer der Endbenutzer beschädigt werden. Keine gute Idee.%
, interpretiert es es an Ort und Stelle .%PATH%
insetx
Ihnen diese Informationen zu verlieren. Außerdem wird die Systempfadeinstellung auf die Art und Weise, wie das OP dies tut, zur Benutzerpfadeinstellung hinzugefügt. Bei erneuter Betrachtung der Frage scheint dies die eigentliche Ursache für das OP-Problem zu sein.setx
, um den Flush abzuschließen .) ~~~ Beidesetx
undsetx/m
standardmäßig reg_sz, wenn Ihre Eingabe 2+ Zeichen enthält%
. ~~~ "expand" in hklm und hkcu bedeutet expand to hklm.setx/m qwe %JAVADIR%\bin
undsetx/m javadir asdfg
in beliebiger Reihenfolge. Öffnen Sie dann ein neues cmd und tun Sieecho %qwe%
: Funktioniert wie erwartet.%JAVADIR%\bin
auftritt ). Wenn also der Pfad in HKLM ursprünglich enthalten war und der Pfad ursprünglich in HKCU enthalten wird%JDK%\bin
dannPATH
auf so gesetzt,C:\Java\bin;C:\jdk\bin
wenn Sie sagen, dass sichsetx PATH %PATH%
der Wert in HKCU ändert, zuC:\Java\bin;C:\jdk\bin
dem (a) einen redundanten Eintrag enthält und (b) Änderungen am Wert von JDK nicht mehr verfolgt.Antworten:
Führen Sie dann
cmd
als Administrator aus:Die Option / M legt die Variable im Bereich SYSTEM fest. Das Standardverhalten besteht darin, es für den USER festzulegen.
TL; DR
Das Kürzungsproblem tritt auf, weil beim Echo von% PATH% die Verkettung von SYSTEM- und USER-Werten angezeigt wird. Wenn Sie es also in Ihrem zweiten Argument zu setx hinzufügen, werden SYSTEM- und USER-Werte in die USER-Variable eingefügt. Wenn Sie erneut ein Echo hören, werden die Dinge verdoppelt.
Darüber hinaus erfordert die Option / M Administratorrechte, sodass Sie Ihr Terminal mit "Als Administrator ausführen" öffnen müssen. Andernfalls beschwert sich setx mit "Zugriff auf Registrierungspfad verweigert".
Letzte Anmerkung: Sie sehen den neuen Wert nicht, wenn Sie% PATH%
cmd
wiederholen, nachdem Sie ihn auf diese Weise eingestellt haben. Sie müssen ihn schließen und wieder öffnen.Wenn Sie die in der Registrierung gespeicherten tatsächlichen Werte überprüfen möchten, überprüfen Sie diese Frage .
quelle
Path
Typ vonREG_EXPAND_SZ
in geändertREG_SZ
. Entfernen Sie dabei alle dort vorhandenen Umgebungsvariablenreferenzen.setx
schneidet PATH auf 1024 Zeichen ab. Wenn PATH zuvor geändert wurde, indem mehr Verzeichnisse vorangestellt wurden, verlieren Sie den größten Teil des ursprünglichen PATH-Inhalts !Das funktioniert perfekt:
Der erste Befehl ruft die USER-Umgebungsvariable 'PATH' in die Variable 'my_user_path' ab. In der zweiten Zeile wird das 'C: \ Python27; C: \ Python27 \ Scripts;' vorangestellt. auf die USER-Umgebungsvariable 'PATH'
quelle
Wenn jemand es in PowerShell ausführen möchte, funktioniert es wie folgt:
Führen Sie Powershell als Administrator aus
Dann
Öffnen Sie zur Überprüfung eine weitere Powershell und zeigen Sie PATH wie folgt an:
quelle
Wenn Sie nicht dazu verpflichtet sind
setx
, können Sie ein alternatives Befehlszeilentool wie pathed verwenden . Eine umfassendere Liste alternativer PATH-Editoren finden Sie unter /superuser/297947/is-there-a-convenient-way-to-edit-path-in-windows-7/655712#655712Sie können den Registrierungswert auch direkt bearbeiten
setx
. Mehr in dieser Antwort .Es ist seltsam, dass Ihr
%PATH%
Zeichen bei 1024 Zeichen abgeschnitten wird. Ich dachte, ichsetx
hätte dieses Problem nicht. Obwohl Sie wahrscheinlich die ungültigen Pfadeinträge bereinigen sollten.quelle
.bat
Datei zu tun und diePATH
Bearbeitung sowie das Einrichten von Python-Code zu übernehmen.Ohne Administratorrechte hat für mich nur eine Bat-Datei funktioniert, die den folgenden Code enthält:
Der Code ist die Kombination der Antworten https://stackoverflow.com/a/45566845/4717152 und https://stackoverflow.com/a/10292113/4717152
quelle
%%
in einer bat-Datei verwenden (oder^%
wenn Sie den Befehl direkt ausführen - sehen Sie, wie Sie in bat vs cmd entkommen ).Ich hatte die gleichen Probleme und fand jetzt eine einfache Lösung.
Pathman verwenden.
Fügt dem Systempfad beispielsweise% M2% hinzu. Nicht mehr und nicht weniger. Keine Probleme mehr beim Abrufen einer Mischung aus Benutzerpfad und Systempfad. Kein Versuch mehr, die richtigen Werte aus der Registrierung zu erhalten ...
Versucht bei Windows 10
quelle
pathman
macht den Job einwandfrei. Sollte abwärtskompatibel mit Windows 2003 Resource Kit seinDies sollte das Anhängen an den Pfad der Systemumgebungsvariablen ohne zusätzliche Extras und das intakte Original ohne Datenverlust durchführen. Ich habe diesen Befehl verwendet, um das Problem zu beheben, das McAfees Web Control mit dem Outlook-Desktop-Client von Microsoft verursacht.
Die Anführungszeichen werden im Pfadwert verwendet, da die Befehlszeile Leerzeichen als Trennzeichen sieht und versucht, den nächsten Wert in der Befehlszeile auszuführen. Die Anführungszeichen überschreiben dieses Verhalten und behandeln alles in den Anführungszeichen als Zeichenfolge.
quelle
Schritte: 1. Öffnen Sie eine Eingabeaufforderung mit Administratorrechten.
Schritte: 2. Führen Sie den folgenden Befehl aus: setx / M PATH "path \ to;% PATH%"
[Hinweis: Ändern Sie den Befehl so, dass path \ to den Ordnerpfad von Ihrem Stammverzeichnis widerspiegelt.]
Beispiel : setx / M PATH "C: \ Programme;% PATH%"
quelle
Ich hatte solche Probleme bei der Verwaltung meiner Computerlabore, als sich die Umgebungsvariable% PATH% 1024 Zeichen näherte, dass ich ein Powershell-Skript schrieb, um das Problem zu beheben.
Sie können den Code hier herunterladen: https://gallery.technet.microsoft.com/scriptcenter/Edit-and-shorten-PATH-37ef3189
Sie können es auch als einfache Möglichkeit verwenden, PATH-Einträge sicher hinzuzufügen, zu entfernen und zu analysieren. Genießen.
quelle
Leider können Sie mit OOTB-Tools weder den Systempfad noch den Benutzerpfad direkt / einfach anhängen. Wenn Sie bei den OOTB-Tools bleiben möchten, müssen Sie entweder den SYSTEM- oder den USER-Pfad abfragen, diesen Wert als Variable speichern, dann Ihre Ergänzungen anhängen und mit setx speichern. Die beiden folgenden Beispiele zeigen, wie Sie beide abrufen, speichern und Ihre Ergänzungen anhängen können. Verwirren Sie sich nicht mit% PATH%, es ist eine Verkettung von USER + SYSTEM und führt zu vielen Überschneidungen im Ergebnis. Sie müssen sie wie unten gezeigt aufteilen ...
An Systempfad anhängen
An Benutzerpfad anhängen
quelle
Dieser vbscript / Batch-Hybrid "append_sys_path.vbs" ist nicht intuitiv, funktioniert aber perfekt:
Vorteile dieses Ansatzes:
1) Die Systempfadumgebung wird bei 1024 Zeichen nicht abgeschnitten.
2) Die System- und Benutzerpfadumgebung wird nicht verkettet.
3) Es wird automatisch als Administrator ausgeführt.
4) Behalten Sie die Prozentsätze in der Systempfadumgebung bei.
5) Unterstützt Leerzeichen, Klammern und Sonderzeichen.
6) Funktioniert unter Windows 7 und höher.
quelle