Path - von doppelten einträgen befreien
ich muss Doppelte einträge in dem Path- Environment entfernen
Hallo zusammen,
ich muss per Script doppelte einträge in dem Path-Environment entfernen.
Wenn ich mir eine Datei erzeugen lasse (Path > Pfad.txt) bekomme ich eine Textdatei mit den Pfadangaben eines Rechners. Nun möchte ich diese Datei von doppelten Einträgen befreien. Wie kann ich dies tun.
z.B.:
PATH=C:\WINDOWS\SYSTEM32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\WBEM;C:\PROGRAM FILES\ALTIRIS\SOFTWARE VIRTUALIZATION AGENT\;C:\APPS\ORACLE\ORA92\BIN;C:\APPS\ORACLE\JRE\1.3.1\BIN;C:\APPS\ORACLE\JRE\1.1.8\BIN;C:\APPS\ORACLE\DEV6I\BIN;C:\APPS\ORACLE\DEV6I\JDK\BIN;C:\WINDOWS\SYSTEM32
soll von allen doppelten Einträgen befreit werden. mit dem Unixtool tr geht das z.B.
kann mir jemand helfen ???
Danke
Gruß
Andreas
[Edit Biber] Verschoben aus "Windows" nach "Batch & Shell". [Edit]
Hallo zusammen,
ich muss per Script doppelte einträge in dem Path-Environment entfernen.
Wenn ich mir eine Datei erzeugen lasse (Path > Pfad.txt) bekomme ich eine Textdatei mit den Pfadangaben eines Rechners. Nun möchte ich diese Datei von doppelten Einträgen befreien. Wie kann ich dies tun.
z.B.:
PATH=C:\WINDOWS\SYSTEM32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\WBEM;C:\PROGRAM FILES\ALTIRIS\SOFTWARE VIRTUALIZATION AGENT\;C:\APPS\ORACLE\ORA92\BIN;C:\APPS\ORACLE\JRE\1.3.1\BIN;C:\APPS\ORACLE\JRE\1.1.8\BIN;C:\APPS\ORACLE\DEV6I\BIN;C:\APPS\ORACLE\DEV6I\JDK\BIN;C:\WINDOWS\SYSTEM32
soll von allen doppelten Einträgen befreit werden. mit dem Unixtool tr geht das z.B.
kann mir jemand helfen ???
Danke
Gruß
Andreas
[Edit Biber] Verschoben aus "Windows" nach "Batch & Shell". [Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85749
Url: https://administrator.de/forum/path-von-doppelten-eintraegen-befreien-85749.html
Ausgedruckt am: 02.05.2025 um 04:05 Uhr
16 Kommentare
Neuester Kommentar

Das Entfernen von doppelten Eintragen (bei deinem Beispiel ist nur einer) aus der Textdatei wird dir nichts nützen. Du musst die Umgebungsvariablen in der Systemsteuerung oder den entsprechenden Registry-Eintrag unter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
bearbeiten.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
bearbeiten.

Moin,
das sehe ich auch so - wenn es wirklich nur dieser eine (letzte ist) - dann würd ich an deiner Stelle entweder:
Fünfe grade sein lassen - C:\WINDOWS\SYSTEM32 am Anfang und Ende schadet nichts - in der Mitte wäre schlimmer..
Wenn wirklich alle Rechner gleich sind - dann die Werte von:
Aber aus Erfahrung rate ich dir - lass Fünfe in dem Fall wirklich grade sein....
das sehe ich auch so - wenn es wirklich nur dieser eine (letzte ist) - dann würd ich an deiner Stelle entweder:
Fünfe grade sein lassen - C:\WINDOWS\SYSTEM32 am Anfang und Ende schadet nichts - in der Mitte wäre schlimmer..
Wenn wirklich alle Rechner gleich sind - dann die Werte von:
HKEY_CURRENT_USER\Environment\Path
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
einmalig anpassen und jeweils mit regedit exportieren, löschen und neu importieren.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Aber aus Erfahrung rate ich dir - lass Fünfe in dem Fall wirklich grade sein....

Wer sagt, dass die Pfadangabe auf 256 Zeichen beschränkt ist? In deinem obigen Beispiel sind es bereits 269 Zeichen......

Darin liegt ja das Problem. Gibt es einfach
jemanden, der mir sagen kann, wie ich einen
String von doppelten Einträgen befreien
kann, bei dem das Trenn zeichen ein
";" ist ???
Hi,jemanden, der mir sagen kann, wie ich einen
String von doppelten Einträgen befreien
kann, bei dem das Trenn zeichen ein
";" ist ???
sogar zwei...
Am besten änderst du den Titel deiner Frage um in Batch oder Script gesucht - um Path - von doppelten einträgen zu befreien
Und wartest auf einen der beiden Zauberer, die sich dann mit einer eleganten "For Schleife" um dein Problem kümmern.

@timobeil
Nach meiner Einschätzung wäre es völlig egal, wie oft und wo Einträge im Pfad vorhanden sind, wenn man davon absieht, dass die Suche unnötig Zeit (in Millisekunden) in Anspruch nähme. Aber vielleicht erläuterst du mir mal, wieso es in der Mitte schlimmer wäre?
C:\WINDOWS\SYSTEM32 am Anfang und Ende schadet nichts - in der Mitte wäre schlimmer..
Nach meiner Einschätzung wäre es völlig egal, wie oft und wo Einträge im Pfad vorhanden sind, wenn man davon absieht, dass die Suche unnötig Zeit (in Millisekunden) in Anspruch nähme. Aber vielleicht erläuterst du mir mal, wieso es in der Mitte schlimmer wäre?

Nach meiner Einschätzung wäre es völlig egal, wie oft und wo Einträge im Pfad vorhanden sind,
wenn man davon absieht, dass die Suche unnötig Zeit (in Millisekunden) in Anspruch nähme.
Aber vielleicht erläuterst du mir mal, wieso es in der Mitte schlimmer wäre?
wenn man davon absieht, dass die Suche unnötig Zeit (in Millisekunden) in Anspruch nähme.
Aber vielleicht erläuterst du mir mal, wieso es in der Mitte schlimmer wäre?
Wenns denn sein muß
Angenommen ich will ein Programm starten, das sich "tracert.exe" nennt und sich (Beispiel) im Ordner %Windir%\System32 befindet.
Da der Pfad genauso abgearbeitet wird - wie die Einträge darin stehen - findet das System diese gewünschte .exe "sofort".
Denn "C:\WINDOWS\SYSTEM32" steht bereits am Anfang - der Rest wird also nicht durchgekaut.
Soweit ok?
Nun nehmen wir das andere Beispiel - ein Programm sucht nach "tnsnames.ORA" - das sich im Pfad "C:\Programme\Oracle\10.2.0.2\network\admin" befindet und an vorletzter Stelle steht.
Nun sucht das System in jedem Ordner, der sich in "Path" befindet nach dieser Datei und findet Sie irgendwann. Bis zum letzten Eintrag "sucht" er nicht mehr.
Steht der "doppelte Eintrag" aber im letzten Beispiel "vor" dem Ort, wo sich die tnsnames.ORA befindet, wird dieser Ordner auch zweimal durchforstet.....
Siehe deine Anmerkung
wenn man davon absieht, dass die Suche unnötig Zeit (in Millisekunden) in Anspruch nähme.

Soweit ok?
Ja!
Nun nehmen wir das andere Beispiel - ein Programm sucht nach "tnsnames.ORA"
- das sich im Pfad "C:\Programme\Oracle\10.2.0.2\network\admin"
befindet und an vorletzter Stelle steht.
- das sich im Pfad "C:\Programme\Oracle\10.2.0.2\network\admin"
befindet und an vorletzter Stelle steht.
Nun sucht das System in jedem Ordner, der sich in "Path" befindet nach dieser
Datei
Datei
Nöö. Nur unter bestimmten Voraussetzungen.
Aber wie dem auch sei: Stören tut da nichts.

Von daher lieber fünfe grade sein lassen....
..oder von den beiden lernen
..oder von den beiden lernen
Moin rddomain,
ich verfolge ja schon den halben Tag Eure Fachdiskussion über %path% sehr interessiert.
Ich habe für (bzw. gegen) ähnliche Alltagsprobleme ein oder zwei "doskey"- Makros geschrieben, weil es doch etwas tippfehlerträchtig zum Jedesmal-Neueingeben am CMD-Prompt ist.
Okay, die Macros entfernen aber nicht nur doppelte, sondern auch leere(;;) und nicht mehr vorhandene Pfade.
Für Deine (einfachere) Aufgabenstellung reicht eine Zeile am CMD-Prompt, die bezogen auf die Variable %bspPath%, die ich mit Deinen Pfad-Werten gefüllt habe, folgendes tut:
[die einzugebende Zeile beginnt mit ">"]
Leere Pfade (doppelte ;; im %bsppath%) werden entfernt; ob Verzeichnis da oder nicht beachte ich nicht.
Ein halbwegs lesbarer Bath könnte so aussehen:
Egal ob Batch oder Oneliner vom CMD-Prompt aus, jetzt kann entweder:
Nix mit selber rumeiern inner Registry...*tztz
.... ja, wenn wir programmieren könnten, aber wir bätscheln doch nur ein bissi rum...
P.S. Aber bevor ihr diesen Batch verwendet wartet noch auf die bastla-Variante.
Mit sed dürfte er etwas schlanker sein (der Code, nicht bastla).
Grüße
Biber
ich verfolge ja schon den halben Tag Eure Fachdiskussion über %path% sehr interessiert.
Ich habe für (bzw. gegen) ähnliche Alltagsprobleme ein oder zwei "doskey"- Makros geschrieben, weil es doch etwas tippfehlerträchtig zum Jedesmal-Neueingeben am CMD-Prompt ist.
Okay, die Macros entfernen aber nicht nur doppelte, sondern auch leere(;;) und nicht mehr vorhandene Pfade.
Für Deine (einfachere) Aufgabenstellung reicht eine Zeile am CMD-Prompt, die bezogen auf die Variable %bspPath%, die ich mit Deinen Pfad-Werten gefüllt habe, folgendes tut:
(=18:08:31 D:\temp=)
>@(echo\>nul 2>p & for %i in ("%bsppath:;=";"%") do @find %i p>nul||echo\|set /P =""%~i";">>p) && set /p nupaz=<p & @echo !nupaz:"=!
C:\WINDOWS\SYSTEM32;C:\WINDOWS\SYSTEM32\WBEM;C:\PROGRAM FILES\ALTIRIS\SOFTWARE VIRTUALIZATION AGENT\;C:\APPS\ORACLE\ORA92\BIN;C:\APPS\ORACLE\JR
E\1.3.1\BIN;C:\APPS\ORACLE\JRE\1.1.8\BIN;C:\APPS\ORACLE\DEV6I\BIN;C:\APPS\ORACLE\DEV6I\JDK\BIN;
(=18:08:33 D:\temp=)
Leere Pfade (doppelte ;; im %bsppath%) werden entfernt; ob Verzeichnis da oder nicht beachte ich nicht.
Ein halbwegs lesbarer Bath könnte so aussehen:
@echo off & setlocal
Set "oldPath=%path%" & set p="%temp%\p"
echo MfG Biber 2008>nul 2>"%p%"
for %%i in ("%bsppath:;=";"%") do @find %%i %p%>nul||echo\|set /P =""%%~i";">>%p%
set /p nupaz=<%p%
:: Der newPath steht jetzt in der "sprechenden" Variablen %nupaz%
:: Allerdings in der Form "Einzelpfade";"in";"Anfü-Zeichen"
Set nupaz=%nupaz:"=%
:: und jetzt ohne Anfüzeichen.
Egal ob Batch oder Oneliner vom CMD-Prompt aus, jetzt kann entweder:
- der neue Path in eine Txt-Datei geschrieben werden (Echo %nupaz%>neuerPath.txt)
- oder, was ich empfehle, gleich mit dem Pathman-Utility (M$-ResKits) neu gesetzt werden.
>pathman /?
USAGE:
/as path[;path[;path ...]]
Adds the semicolon-separated paths to the system path.
/au path[;path[;path ...]]
Adds the semicolon-separated paths to the user path.
/rs path[;path[;path ...]]
Removes the semicolon-separated paths from the system path.
/ru path[;path[;path ...]]
Removes the semicolon-separated paths from the user path.
.... ja, wenn wir programmieren könnten, aber wir bätscheln doch nur ein bissi rum...
P.S. Aber bevor ihr diesen Batch verwendet wartet noch auf die bastla-Variante.
Mit sed dürfte er etwas schlanker sein (der Code, nicht bastla).
Grüße
Biber

Wat'n Aufwand für Pipifax..... 
Da musst du dann aber noch ausklamüsern, welche Angaben aus dem Userenvironment und welche aus dem Systemenvironment stammen.
Und sollte XP oder W2k irgenwann mal aus einer Multiboot-Umgebung mit Win9x entstanden sein, hast du im Pfad auch noch die Angaben aus der damaligen Autoexec.bat
Viel Spaß! Hehe.....
Da musst du dann aber noch ausklamüsern, welche Angaben aus dem Userenvironment und welche aus dem Systemenvironment stammen.
Und sollte XP oder W2k irgenwann mal aus einer Multiboot-Umgebung mit Win9x entstanden sein, hast du im Pfad auch noch die Angaben aus der damaligen Autoexec.bat
Viel Spaß! Hehe.....
Na ja, nachdenker,
das meinte ich vorhin mit "ja, wenn wir programmieren könnten..".
Ich hätte sicherlich KEIN M$-Utility empfohlen, wenn es nicht für diesen Zweck brauchbar wäre.
Pathman.exe gibt einen Errorlevel von 1 zurück bei Erfolg, 0 bei In-die-Grütze-gegangen.
Vollkommen irre, diese Redmonder, aber kalkulierbar. Und gewissermaßen verläßlich.
Und die Einzel-Pfade kann ich ja wirklich, wie oben gezeigt, mit einer halben Codezeile trennen,
die hab ich ja zum Spielen
Somit kann ich natürlich -zuerst im USER-Environment die Pfade neu setzen (versuchen), wenn es da schon gab --Errorlevel 0.
Wenn es das nicht gab -Errorlevel 1.
Und ich weiß, wenn es einen Pfad im Userenvironment nicht gab, dann muss er wohl im System-Environment sein.
Auch das kann ich prüfen.
Aber egal, es ist ja nur for educational purposes...
Nur: wenn Dir eine Zeile vom CMD-Prompt schon zuviel Aufwand ist, dann solltest Du mal die 467 Trillionen Codezeilen im Vista richtig anerkennen.
Grüße
Biber
das meinte ich vorhin mit "ja, wenn wir programmieren könnten..".
Ich hätte sicherlich KEIN M$-Utility empfohlen, wenn es nicht für diesen Zweck brauchbar wäre.
Pathman.exe gibt einen Errorlevel von 1 zurück bei Erfolg, 0 bei In-die-Grütze-gegangen.
Vollkommen irre, diese Redmonder, aber kalkulierbar. Und gewissermaßen verläßlich.
(=19:16:17 D:\temp=)
>pathman /ru unknownPath && echo "unknown" gibts nich
"unknown" gibts nich
(=19:16:51 D:\temp=)
>pathman /au unknownPath || echo "unknown" gibts jetzt neu -Fehler kommt zurück
"unknown" gibts jetzt neu -Fehler kommt zurück
(=19:17:28 D:\temp=)
>pathman /au unknownPath || echo "unknown" gibts schon - Errorlevel 0 kommt zurück ?!?
(=19:17:30 D:\temp=)
>
die hab ich ja zum Spielen
>for %i in ("%bsppath:;=";"%") do @echo %i
"C:\WINDOWS\SYSTEM32"
"C:\WINDOWS"
"C:\WINDOWS\SYSTEM32\WBEM"
"C:\PROGRAM FILES\ALTIRIS\SOFTWARE VIRTUALIZATION AGENT\"
"C:\APPS\ORACLE\ORA92\BIN"
"C:\APPS\ORACLE\JRE\1.3.1\BIN"
"C:\APPS\ORACLE\JRE\1.1.8\BIN"
"C:\APPS\ORACLE\DEV6I\BIN"
"C:\APPS\ORACLE\DEV6I\JDK\BIN"
"C:\WINDOWS\SYSTEM32"
(=19:28:35 D:\temp=)
>
Wenn es das nicht gab -Errorlevel 1.
Und ich weiß, wenn es einen Pfad im Userenvironment nicht gab, dann muss er wohl im System-Environment sein.
Auch das kann ich prüfen.
Aber egal, es ist ja nur for educational purposes...
Nur: wenn Dir eine Zeile vom CMD-Prompt schon zuviel Aufwand ist, dann solltest Du mal die 467 Trillionen Codezeilen im Vista richtig anerkennen.
Grüße
Biber

Hab ich irgendwo geschrieben, dass mir das zuviel Aufwand wäre? Ich halte es lediglich für überflüssig, weil es wenig bis nichts bringt. 
Wenn sein Chef (vermute ich mal) den Auftrag dazu erteilt, weil er es für nötig erachtet, solll er sich eine Anwendung dazu programmieren lassen, dann lernt er die Preise kennen.
Ich persönlich halte jedenfalls nichts davon, für jede nur erdenkbare Aufgabe, auch wenn sie nach meiner (unmaßgebichen) Meinung unsinnig ist, hier eine eigene Lösung zu präsentieren.
Hilfe für User ja, aber keine kostenlosen Programmlösungen für Firmen, dazu ist das Forum eigentlich nicht gedacht.
Das heißt allerdings nicht, dass du meinen Standpunkt teilen musst, das kannst du natürlich gern halten, wie du möchtest.
Wenn sein Chef (vermute ich mal) den Auftrag dazu erteilt, weil er es für nötig erachtet, solll er sich eine Anwendung dazu programmieren lassen, dann lernt er die Preise kennen.
Ich persönlich halte jedenfalls nichts davon, für jede nur erdenkbare Aufgabe, auch wenn sie nach meiner (unmaßgebichen) Meinung unsinnig ist, hier eine eigene Lösung zu präsentieren.
Hilfe für User ja, aber keine kostenlosen Programmlösungen für Firmen, dazu ist das Forum eigentlich nicht gedacht.
Das heißt allerdings nicht, dass du meinen Standpunkt teilen musst, das kannst du natürlich gern halten, wie du möchtest.
@54487
Aber hier sind wir ja im Bereich "Windows" ...hier sind ja die Profis und Firmen.
.... is' mir dat paaaainlich...
Es wird ja wohl kein Profi so verwegen sein, Batch-Skripte im produktiven Umfeld einzusetzen.
Nimm es als das, was es ist: Ein bisschen Newbie-Hilfe. Mehr nicht.
Grüße
Biber
Hilfe für User ja, aber keine kostenlosen Programmlösungen für Firmen.
Uuups, stimmt - ich dachte, er hätte im Bereich "Batch & Shell" gefragt.Aber hier sind wir ja im Bereich "Windows" ...hier sind ja die Profis und Firmen.
.... is' mir dat paaaainlich...
Es wird ja wohl kein Profi so verwegen sein, Batch-Skripte im produktiven Umfeld einzusetzen.
Nimm es als das, was es ist: Ein bisschen Newbie-Hilfe. Mehr nicht.
Grüße
Biber