Ich versuche, Umgebungsvariablen mit dem setx
Befehl wie folgt festzulegen
setx PFAD "f: \ allgemeine tools \ git \ bin; f: \ allgemeine tools \ python \ app; f: \ allgemeine tools \ python \ app \ scripts; f: \ allgemeine tools \ ruby \ bin; f: \ masm32 \ bin; F: \ Borland \ BCC55 \ Bin;% PATH% "
Ich erhalte jedoch die folgende Fehlermeldung, wenn der Wert länger als 1024 Zeichen ist:
WARNUNG: Die gespeicherten Daten werden auf 1024 Zeichen gekürzt.
ERFOLG: Angegebener Wert wurde gespeichert.
Aber einige der Pfade am Ende werden nicht in Variablen gespeichert, da die Anzahl der Zeichen begrenzt ist, wie der Fehler vermuten lässt.
windows-7
environment-variables
windows-server-2008-r2
Madhur Ahuja
quelle
quelle
%PATH%
bei superuser.com/questions/297947Antworten:
Am besten bearbeiten Sie die Registrierung direkt.
Navigieren Sie zu
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
demPath
Wert und bearbeiten Sie ihn (und starten Sie ihn neu, um den neuen Wert zu aktivieren).Beachten Sie jedoch, dass Sie zwar einen sehr langen Pfad eingeben können (bis zur maximalen Länge der Umgebungsvariablen; 2.048 oder 32.768 Byte, abhängig von der Quelle), jedoch nicht alle Softwareprogramme in der Lage sind, ihn zu lesen und korrekt zu verarbeiten, wenn er zu lang ist.
quelle
setx
bearbeitet die Registrierung wie angegeben und sendet dann eineWM_SETTINGCHANGE
Nachricht. Dies teilt allen Fenstern der obersten Ebene mit, dass sich eine Systemeinstellung geändert hat (in diesem Fall eine Umgebungsvariable). Ohne das wissen der Explorer und die damit geöffneten Programme nichts über die Änderung. Sie können die Nachricht auch manuell senden (ich habe ein Programm dafür geschrieben und eine Batch-Datei, die ersetzt werden mussSETX
, damit die Registrierung bearbeitet wird, gefolgt von der Übertragung), aber genau wiesetx
der Envvar-Dialog mit den Systemeigenschaften hat dies auch Nebenwirkungen einen Neustart vorziehen.:-|
Wenn Sie Windows Vista oder höher verwenden, können Sie ein
symbolic link
in den Ordner machen. zum Beispiel:würde einen Link machen, so
c:\pf
wäre Ihr Programmordner. Mit diesem Trick habe ich 300 Zeichen von meinem Weg gestrichen.(Ich weiß, es hat nichts mit setx zu tun, aber es ist nützlich für Leute, die über 1024 Zeichen hinweg suchen.)
quelle
Sie können ein PowerShell-Skript verwenden, das dem folgenden ähnelt:
Der API-Aufruf Environment.SetEnvironmentVariable () wird rundgesendet,
WM_SETTINGCHANGE
sodass Sie nicht neu starten müssen.quelle
[Environment]::SetEnvironmentVariable('path', "$newPath;$oldPath",'Machine')
?@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::SetEnvironmentVariable('path',\"C:\Program Files (x86)\GNU\GnuPG;$([Environment]::GetEnvironmentVariable('path','Machine'))\",'Machine');"
Mit diesem Open-Source-Befehlszeilentool SetEnv können Sie PATH und andere Umgebungsvariablen ohne Einschränkungen bearbeiten. Es wird ein dynamischer Puffer verwendet, daher gibt es keine statischen Einschränkungen wie bei 1024.
http://www.codeproject.com/Articles/12153/SetEnv
Die Wahl eines% als Präfix zum Anhängen an eine Variable hätte jedoch besser sein können, da die Syntax manchmal schwierig ist, wenn sie mit anderen lokalen Stapelvariablen verwendet wird ...
quelle
Ein weitaus besseres Tool als setx zur Manipulation von Pfaden ist pathed.exe . Leider ist es auf die Bearbeitung des Pfades beschränkt.
Zusätzlich zu einer besseren Benutzererfahrung als bei setx gibt es keine Beschränkung auf 1024 Zeichen. Im Gegensatz zur direkten Manipulation der Registrierung verwendet diese Anwendung den API-Aufruf Environment.SetEnvironmentVariable (), der rundgesendet wird
WM_SETTINGCHANGE
.quelle
Am liebsten ändere ich die Ordnernamen in den PATH-Variablen, um die 8.3-Namen zu verwenden. Diese StackOverflow-Antwort enthält ein hervorragendes Skript (das von einer .bat-Datei ausgeführt wird), das die "verkleinerte" Version der gesamten PATH-Variablen generiert, die Sie dann in die Dialogfelder "Variable bearbeiten" einfügen können. Die einzige Einschränkung ist, dass Sie die Teile SYSTEM und USER aufteilen müssen. Während das Skript die minimierte Version für jeden Ordner durchläuft und herausfindet, werden ungültige / nicht vorhandene Pfade verworfen und gemeldet. Netter kleiner Aufräumbonus.
quelle
fsutil.exe behavior set disable8dot3 1
.fsutil 8dot3name strip
AFTER mit dem Skript würde jedoch definitiv Probleme für die betroffenen Ordner verursachen.fsutil 8dot3name strip
heute einige früher verwendet habe und bedenke, dass (a) zuerst die Registrierung überprüft wird und (b) der Pfad in der Registrierung gespeichert wird, kann mein früheres Anliegen unbegründet sein, solange der Benutzer nicht die/f
Option (force) verwendet .Sie können diese Zeile in Ihr BAT einfügen:
Siehe das Doppelte
%%
.(Referenz: https://support.microsoft.com/en-us/kb/75634 )
quelle
%path%;c:\...[snip]...\7z
in die Benutzervariable geschriebenpath
und alles andere, was Sie dort hatten, verworfen.%path%
Umgebungsvariablen im lokalen Pfad sollte keine Auswirkungen haben.Wenn es nicht erforderlich ist, Systempfad und Benutzerpfad getrennt zu halten, gehen Sie wie folgt vor:
quelle
Ich denke, der beste Weg ist der nächste (mit Powershell). Auf diese Weise vermeiden Sie auch das Litmit von 1024 Zeichen.
Sie finden den Code unter: https://gist.github.com/drazul/b92f780689bd89a0d2a7
quelle