Gibt es ein Befehlszeilentool, mit dem Umgebungsvariablen in Windows bearbeitet werden können?

12095
Piotr Dobrogost

Gibt es ein Befehlszeilentool, mit dem Umgebungsvariablen in Windows bearbeitet werden können?

Es wäre schön, wenn dies ein intelligentes Werkzeug wäre, zum Beispiel:

  • Wenn Sie einen Pfad hinzufügen, um die PATH-Variable anzugeben, und dieser Pfad ist bereits vorhanden, sollte dieser Eintrag nicht verdoppelt werden.
  • Das Einfügen eines neuen Pfads in die PATH-Variable sollte vor / nach einem anderen Pfad oder in einer bestimmten Reihenfolge möglich sein (der erste, der 7., der letzte usw.).
  • Es sollte möglich sein, nur einen Teil des Variablenwerts zu ändern (im Falle des PATH einen bestimmten Pfad aus einer Liste aller Pfade).

Und das letzte, aber nicht zuletzt - ich möchte, dass meine Änderungen zwischen den Sitzungen bestehen bleiben so einfach SET steht außer Frage ...

Es gibt ein sehr schönes GUI-Tool für diesen Pfadeditor, und ich brauche so etwas außer für die Befehlszeile.

15
Technisch ja. Es heißt SET. Ich weiß, dass es nicht hübsch ist, aber Sie können nicht einfacher sein, als nur die Variablen mit den zur Verfügung stehenden Tools festzulegen. Michael Todd vor 15 Jahren 4
Interessant. Ich war mir sicher, dass es dafür ein ziemlich bekanntes Tool von Drittanbietern geben würde. Sasha Chedygov vor 14 Jahren 0
Welche Windows-Version laufen Sie? Sasha Chedygov vor 14 Jahren 0
@musicfreak Vista Home Premium 64bit Piotr Dobrogost vor 13 Jahren 0

9 Antworten auf die Frage

16
Treb

Ich kenne kein Werkzeug, das dies tut, aber vielleicht können Sie den regBefehl verwenden:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path 

um den aktuellen Pfad zu lesen, und

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /d "newPath" /f 

um Ihren neuen Wert zu schreiben.

Sie benötigen Administratorrechte für den Zugriffsrecht in HKLM. Wenn dies ein Problem ist, sollten Sie HKCU\Environmentstattdessen die benutzerspezifische Pfadeinstellung ändern .

Diese Antwort sollte akzeptiert worden sein, sie kann jede Umgebungsvariable ändern und kann sogar in einer Batchdatei gekapselt werden, so dass nur der Name und der neue Wert eingegeben werden müssen. Tom Wijsman vor 14 Jahren 1
Wenn dies mit Vi kombiniert wird, würde es den Kriterien des Fragestellers näherkommen. ZB eine Batchdatei, die den Pfad in eine temporäre Textdatei schreibt, sie in vi öffnet und dann, wenn Sie vi schließen, die Datei in den Pfad schreibt. Auf diese Weise können Sie Ihren Pfad einfach über die Befehlszeile bearbeiten. Ich habe so etwas in XP gemacht, mit einer Batch-Datei, einem Notizblock und diesen Reg-Befehlen. barlop vor 11 Jahren 0
ACHTUNG: Kopieren Sie diese Funktion NICHT ohne Gedanken, es sei denn, Sie möchten etwas Dummes tun ... n611x007 vor 10 Jahren 1
7
bobbymcr

Wenn Sie eine generische Methode zum Festlegen einer Umgebungsvariablen benötigen und die Änderungen beibehalten werden, ist setx.exe das zu verwendende Werkzeug. Es kann nicht die "intelligenten" Dinge tun, nach denen Sie fragen ...

setx.exe ist in Windows Vista oder höher enthalten. Wenn Sie eine frühere Version von Windows verwenden, können Sie den obigen Download-Link verwenden, um diese Version zu erhalten.

5
Joey

Für das aktuelle Programm gibt es path:

Zeigt einen Suchpfad für ausführbare Dateien an oder legt diesen fest.

PATH [[drive:]path[;...][;%PATH%] PATH ; 

Geben Sie ein PATH ;, um alle Einstellungen cmd.exefür den Suchpfad zu löschen und nur im aktuellen Verzeichnis zu suchen.

Geben Sie PATHohne Parameter ein, um den aktuellen Pfad anzuzeigen. Beim Einfügen %PATH%in die neue Pfadeinstellung wird der alte Pfad an die neue Einstellung angehängt.

Dies ist jedoch so ziemlich das Gleiche wie set PATH.

Damit Umgebungsvariablen bestehen bleiben, müssen Sie die Registrierung bearbeiten oder verwenden setx.

3
David Tersigni

Ich habe gerade die Möglichkeit entdeckt, dass Benutzer das Bearbeitungsdialogfeld "Umgebungsvariablen" ohne erhöhte Berechtigungen ausführen können.

Führen Sie im Startmenü Folgendes aus:

rundll32 sysdm.cpl,EditEnvironmentVariables 
+1 für eine Befehlszeilenmethode, um zum GUI-Bearbeitungs-Widget zu gelangen, da dies sicherlich direkter als der Klickpfad ist, auch wenn die Antwort außerhalb des Themas liegt, da es sich bei Q um das Bearbeiten von PATH über die Befehlszeile handelt. matt wilkie vor 11 Jahren 1
2
sangretu

PATH einstellen

(Hilfesatz)

Dies gilt nur für die Terminalsitzung. Zum Hinzufügen / Ändern von Werten müssen Sie auch den gesamten alten Pfad erneut eingeben. John T vor 15 Jahren 1
Nicht wahr. SET PATH =% path%; c: \ newpath Michael Todd vor 15 Jahren 2
Sie haben es immer noch eingegeben, nur nicht erweitert :) Das wird auch nicht gespeichert. Versuchen Sie, die Eingabeaufforderung zu schließen und eine neue zu öffnen, und überprüfen Sie dann Ihren Pfad. John T vor 15 Jahren 2
Er hat nicht angegeben, ob es zwischen den Sitzungen bestehen bleiben muss. sangretu vor 15 Jahren 0
Wenn Sie herausgefunden haben, was der Patheditor (sein Vorschlag) tut, wird er dauerhaft gespeichert. set PATH wird nur in Build-Skripten für Programme verwendet, da es temporär ist. John T vor 15 Jahren 4
Ich denke, Microsoft hat im Windows 2000 Resource Kit ein Tool namens setx.exe ausgeliefert. Es funktioniert wie das eingebaute Set, es gilt jedoch dauerhaft. Nicht sicher, wo Sie jetzt setx.exe finden, aber es funktioniert immer noch auf Vista. Cheeso vor 15 Jahren 0
1
Cheeso

Ich habe dazu eine Reihe von Batch-Skripten geschrieben. addpath.bat fügt dem Pfad Elemente hinzu, rmpath.bat entfernt Elemente aus dem Pfad und lpath.bat listet nur den Pfad auf. Aber dann brauchte ich einige Support-Skripte, also gibt es auch chkpath.bat.

Es war nicht trivial und erforderte tr.exe und cat.exe, ein paar Dienstprogramme im Unix-Stil. Der Grund ist nicht trivial: Es gibt keine Backticks in cmd.exe (obwohl Sie hierfür Schleifen verwenden können) und kurze Namen im Vergleich zu langen Namen.

addpath.bat:

@echo off setlocal set cwd=%~dps0  goto testit  :loopy  call %cwd%chkpath "%~1" if %errorlevel%==2 ( set path=%path%;%~1 )  shift  :testit if not _%1==_ goto loopy   call %cwd%lpath.bat  endlocal & set path=%path% 

ChkPath.bat:

@echo off goto START  ------------------------------------------------------- chkpath.bat  checks path for existence of the given segment. Returns 1 if present, 2 if not present, 0 if not checked.  The matching and checking complicated by case sensitivity and "short pathnames".  created sometime in 2003 and lovingly maintained since then.   -------------------------------------------------------  :START setlocal enabledelayedExpansion set rc=0 set cwd=%~dps0 set curdrive=%~d0 set tr=%curdrive%\bin\tr.exe set regexe=%windir%\system32\reg.exe   if _%1==_ goto Usage   @REM convert arg 1 to a fully-qualified, short path name, @REM and then convert to uppercase. set toupper=%~fs1 call :ToUpper set tocheck=%toupper%   if not _%TEMP%==_ goto GotTemp call :gettemp   :GotTemp set d=%DATE:~4% set stamp=%d:~6%%d:~3,2%%d:~0,2%%TIME::=% set d= set tempfile1=%TEMP%\chkpath1-%stamp%.tmp  echo %path% | %tr% ; \n > %tempfile1%  @REM check each element in the path for the match: for /f "delims=^" %%I in (%tempfile1%) do ( if !rc!==0 ( call :CheckElt "%%I" ) )  if %rc%==0 set rc=2 goto END   -------------------------------------------- * checkelt * * check one element in the path to see if it is the same * as the TOCHECK string. The element is first canonicalized. *  :CheckElt @REM remove surrounding quotes set ERF=%1 if [x%ERF%]==[x] goto CheckEltDone @REM convert to fully-qualified, short paths, uppercase set TOUPPER=%~fs1% call :ToUpper if _%TOCHECK% == _%TOUPPER% set rc=1 :CheckEltDone goto:EOF --------------------------------------------   -------------------------------------------- * backtick * * invoke a command and return the result as a string. * This is like backtick in csh or bash. * To call, set variable BACKTICK to the command to be run. * The result will be stored in the env variable of the same name. *  :backtick FOR /F "usebackq delims=" %%i IN (`%backtick%`) DO ( SET backtick=%%i ) goto backtick_done :backtick_none SET backtick=nothing to exec :backtick_done goto:EOF --------------------------------------------   -------------------------------------------- * gettemp * * get the temporary directory, as stored in the registry. * Relies on backtick. * * The result set TEMP. *  :gettemp set regkey=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders set regvalname=Local AppData set backtick=%regexe% query "%regkey%" /v "%regvalname%" call :backtick for /f "tokens=4" %%a in ("%backtick%") do ( set temp=%%a ) goto:EOF --------------------------------------------    -------------------------------------------- * ToUpper * * Convert a string to all uppercase. * To call, set variable TOUPPER to the thing to be converted. * The result will be stored in the env variable of the same name. *  :ToUpper FOR /F "usebackq delims=" %%I IN (`echo %toupper% ^| %tr% a-z A-Z`) DO ( SET toupper=%%I ) goto:EOF --------------------------------------------   -------------------------------------------- :CleanUp if _%tempfile1%==_ goto CleanUpDone if exist %tempfile1% del %tempfile1% :CleanUpDone goto:EOF --------------------------------------------   -------------------------------------------- :Usage echo. echo Usage: chkpath ^<path^> echo checks if path element is included in path variable. echo returns 1 if yes, 2 if no, 0 if not checked. echo. goto END --------------------------------------------   :END call :CleanUp  :ReallyEnd  endlocal & set errorlevel=%rc% @REM set errorlevel=%rc% @REM echo %errorlevel% 

lpath.bat:

@echo. @set curdrive=%~d0  @REM This form post-fixes a | at the end of each path element. Useful for debugging trailing spaces. @REM @path | %curdrive%\cygwin\bin\sed.exe -e s/PATH=// -e 's/;/^|\n/g' -e 's/$/^|/g'  @REM This form shows bare path elements. @REM @path | %curdrive%\cygwin\bin\sed.exe -e 's/PATH=//' -e 's/;/^\n/g' @path | %curdrive%\utils\sed -e "s/PATH=//" | %curdrive%\utils\tr ; \n @echo. 
Ich denke, die "for" -Schleife könnte auch anstelle von "tr" / "cat" verwendet werden. grawity vor 15 Jahren 0
1
hugo der hungrige

You might wanna check out pathed of the gtools collection: http://www.p-nand-q.com/gtools.html

It provides a set of commands for the command promt like

pathed /APPEND %CD% /USER 

to append the current path for example. I haven't really checked it out to be honest, as I'm totally fine with using a GUI.

Other options are:

 /MACHINE: print machine PATH /USER: print user PATH /ADD: add variable at the head /APPEND: add variable at the tail /REMOVE: remove path / index /SLIM: strip duplicate vars /ENV: environment variable, defaults to PATH 

Together with which of the same collection, you got yourself some good tools, I suppose. Which "locates executable files on the PATH".

 /EXTENSION: search for extension, can be a ; separated list /DIR: add directory, can be a ; separated list /RECURSIVE: search directories recursively /SINGLE: stop after the first find result /ENV: environment variable, defaults to PATH FILE : one or more files to find 

Source: http://op111.net/82/

Kannst du erklären, worauf du verlinkst? Nur-Link-Antworten können ungültig werden, wenn der verknüpfte Inhalt nicht verfügbar ist. bwDraco vor 11 Jahren 1
Shure Entschuldigung, ich habe mich implizit auf die Frage bezogen. hugo der hungrige vor 11 Jahren 0
Scheint, die URL für Gtools und pathed ist nun tot. http://www.p-nand-q.com/gtools.html DevPlayer vor 9 Jahren 0
0
Piotr Dobrogost

Der Pfadmanager (pathman.exe) von Windows Server 2003 Resource Kit Tools ist die beste Übereinstimmung, die ich finden könnte. Es war bereits im NT Resource Kit verfügbar.

Vielleicht versuchen Sie `setx.exe` n611x007 vor 10 Jahren 0
@ n611x007, `setx` steht für allgemeine Umgebungsvariablen; "pathman" dient speziell zum Manipulieren (dh ** Analysieren **) des Pfads. Synetech vor 8 Jahren 0
0
matt wilkie

Wie prüfe ich, ob das Verzeichnis in% PATH% existiert? On Stack Overflow beschreibt in hervorragender Weise, was die Bearbeitung von Windows PATH zusammen mit einer Batchdatei schwierig macht, um sie zu überwinden. Um herauszufinden, wie man es richtig einsetzt, war addpath.batetwas Übung für mich, da seine Aufrufstruktur neu war. Dies funktioniert jedoch:

set _path=C:\new\directory\to\add\to\path call addpath.bat _path set _path= 

Wiederholte Zündungen fügen das neue Verzeichnis nicht hinzu, wenn es bereits vorhanden ist. Dies betrifft nicht die dauerhafte Bearbeitung der Änderungen in Sitzungen.