rddomain
Goto Top

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]

Content-Key: 85749

Url: https://administrator.de/contentid/85749

Printed on: April 19, 2024 at 21:04 o'clock

Mitglied: 54487
54487 Apr 17, 2008 at 09:55:07 (UTC)
Goto Top
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.
Mitglied: 60730
60730 Apr 17, 2008 at 10:16:25 (UTC)
Goto Top
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:

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.

Aber aus Erfahrung rate ich dir - lass Fünfe in dem Fall wirklich grade sein....
Member: rddomain
rddomain Apr 17, 2008 at 10:57:48 (UTC)
Goto Top
Danke für Eure Antworten, doch liegt das Proble etwas tiefer.
Das Proble ist, das verschiedene Einträge doppelt vorkommen. und es sein kann, das Einträge 4, 5 ,6 mal vorkommen und bei einer Pfadlänge von 256 ganz schnell ende ist.

Aber lange rede. Ich benötige ein program, script, welche mit die erzeugte Datei von doppelten Einträgen säubert. das zurückspielen in die Regestry, geht dann wieder ohne Problem.
Mitglied: 54487
54487 Apr 17, 2008 at 11:01:17 (UTC)
Goto Top
Wer sagt, dass die Pfadangabe auf 256 Zeichen beschränkt ist? In deinem obigen Beispiel sind es bereits 269 Zeichen......
Member: rddomain
rddomain Apr 17, 2008 at 11:07:09 (UTC)
Goto Top
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 ??? Danke

rddomain
Mitglied: 60730
60730 Apr 17, 2008 at 12:07:26 (UTC)
Goto Top
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,

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.
Mitglied: 54487
54487 Apr 17, 2008 at 12:11:45 (UTC)
Goto Top
@timobeil

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? face-wink
Mitglied: 60730
60730 Apr 17, 2008 at 13:48:49 (UTC)
Goto Top
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? face-wink

Wenns denn sein muß face-wink

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. face-wink face-wink

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.
Mitglied: 54487
54487 Apr 17, 2008 at 13:57:33 (UTC)
Goto Top
Soweit ok?

Ja! face-wink

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

Nöö. Nur unter bestimmten Voraussetzungen.

Aber wie dem auch sei: Stören tut da nichts.
Mitglied: 60730
60730 Apr 17, 2008 at 16:02:01 (UTC)
Goto Top
Von daher lieber fünfe grade sein lassen....

..oder von den beiden lernen face-wink
Member: Biber
Biber Apr 17, 2008 at 16:36:20 (UTC)
Goto Top
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:
(=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=)
[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:
@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.
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
Mitglied: 54487
54487 Apr 17, 2008 at 16:49:45 (UTC)
Goto Top
Wat'n Aufwand für Pipifax..... face-wink

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.....
Member: Biber
Biber Apr 17, 2008 at 17:24:06 (UTC)
Goto Top
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.

(=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=)
>
Und die Einzel-Pfade kann ich ja wirklich, wie oben gezeigt, mit einer halben Codezeile trennen,
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=)
>
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. face-wink

Grüße
Biber
Mitglied: 54487
54487 Apr 17, 2008 at 17:30:49 (UTC)
Goto Top
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. face-wink

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. face-wink
Member: Biber
Biber Apr 17, 2008 at 17:40:05 (UTC)
Goto Top
@54487
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
Member: rddomain
rddomain Apr 18, 2008 at 06:25:01 (UTC)
Goto Top
Hallo zusammen,

erst ein mal vielen lieben Dank an alle Bezeiligten, ganz besonders an "Biber", aber auch an alle anderen für die rege Unterstüzung und Beiträge. Ich selber halte es auch unsinnig "doppelte" einträge zu entfernen. Aber Ihr kennt das ja - Wenn einer etwas will....
Was ich hier wirklich super finde ist die hilfsbereitschaft unter den administratoren und auch die neutrale Beurteilung einer Aufgabe.
Allso nochmals an alle hier
V I E L E N L I E B E N D A N K für Eure Antworten und Eure hilfe.

Gruß

rddomain