Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Path - von doppelten einträgen befreien

Frage Entwicklung Batch & Shell

Mitglied: rddomain

rddomain (Level 1) - Jetzt verbinden

17.04.2008, aktualisiert 18.04.2008, 7879 Aufrufe, 16 Kommentare

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]
Mitglied: 54487
17.04.2008 um 11:55 Uhr
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.
Bitte warten ..
Mitglied: 60730
17.04.2008 um 12:16 Uhr
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....
Bitte warten ..
Mitglied: rddomain
17.04.2008 um 12:57 Uhr
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.
Bitte warten ..
Mitglied: 54487
17.04.2008 um 13:01 Uhr
Wer sagt, dass die Pfadangabe auf 256 Zeichen beschränkt ist? In deinem obigen Beispiel sind es bereits 269 Zeichen......
Bitte warten ..
Mitglied: rddomain
17.04.2008 um 13:07 Uhr
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
Bitte warten ..
Mitglied: 60730
17.04.2008 um 14:07 Uhr
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.
Bitte warten ..
Mitglied: 54487
17.04.2008 um 14:11 Uhr
@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?
Bitte warten ..
Mitglied: 60730
17.04.2008 um 15:48 Uhr
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?

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.
Bitte warten ..
Mitglied: 54487
17.04.2008 um 15:57 Uhr
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.

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.
Bitte warten ..
Mitglied: 60730
17.04.2008 um 18:02 Uhr
Von daher lieber fünfe grade sein lassen....

..oder von den beiden lernen
Bitte warten ..
Mitglied: Biber
17.04.2008 um 18:36 Uhr
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:
01.
(=18:08:31  D:\temp=) 
02.
>@(echo\>nul 2>p & for %i in ("%bsppath:;=";"%") do @find %i p>nul||echo\|set /P =""%~i";">>p) && set /p nupaz=<p & @echo !nupaz:"=! 
03.
 C:\WINDOWS\SYSTEM32;C:\WINDOWS\SYSTEM32\WBEM;C:\PROGRAM FILES\ALTIRIS\SOFTWARE VIRTUALIZATION AGENT\;C:\APPS\ORACLE\ORA92\BIN;C:\APPS\ORACLE\JR 
04.
E\1.3.1\BIN;C:\APPS\ORACLE\JRE\1.1.8\BIN;C:\APPS\ORACLE\DEV6I\BIN;C:\APPS\ORACLE\DEV6I\JDK\BIN; 
05.
 
06.
(=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:
01.
@echo off & setlocal 
02.
Set "oldPath=%path%" & set p="%temp%\p" 
03.
echo Mit freundlichen Grüßen Biber 2008>nul 2>"%p%"  
04.
for %%i in ("%bsppath:;=";"%") do @find %%i %p%>nul||echo\|set /P =""%%~i";">>%p% 
05.
set /p nupaz=<%p% 
06.
:: Der newPath steht jetzt in der "sprechenden" Variablen %nupaz% 
07.
:: Allerdings in der Form "Einzelpfade";"in";"Anfü-Zeichen" 
08.
Set nupaz=%nupaz:"=% 
09.
:: 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.
01.
>pathman /? 
02.
 
03.
USAGE: 
04.
 
05.
        /as path[;path[;path ...]] 
06.
                Adds the semicolon-separated paths to the system path. 
07.
 
08.
        /au path[;path[;path ...]] 
09.
                Adds the semicolon-separated paths to the user path. 
10.
 
11.
        /rs path[;path[;path ...]] 
12.
                Removes the semicolon-separated paths from the system path. 
13.
 
14.
        /ru path[;path[;path ...]] 
15.
                Removes the semicolon-separated paths from the user path. 
16.
 
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
Bitte warten ..
Mitglied: 54487
17.04.2008 um 18:49 Uhr
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.....
Bitte warten ..
Mitglied: Biber
17.04.2008 um 19:24 Uhr
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.

01.
(=19:16:17  D:\temp=) 
02.
>pathman /ru unknownPath && echo "unknown" gibts nich 
03.
"unknown" gibts nich 
04.
 
05.
(=19:16:51  D:\temp=) 
06.
>pathman /au unknownPath || echo "unknown" gibts jetzt neu -Fehler kommt zurück 
07.
"unknown" gibts jetzt neu -Fehler kommt zurück 
08.
 
09.
(=19:17:28  D:\temp=) 
10.
>pathman /au unknownPath || echo "unknown" gibts schon - Errorlevel 0 kommt zurück ?!? 
11.
 
12.
(=19:17:30  D:\temp=) 
13.
>
Und die Einzel-Pfade kann ich ja wirklich, wie oben gezeigt, mit einer halben Codezeile trennen,
die hab ich ja zum Spielen
01.
>for %i in ("%bsppath:;=";"%") do @echo %i 
02.
"C:\WINDOWS\SYSTEM32" 
03.
"C:\WINDOWS" 
04.
"C:\WINDOWS\SYSTEM32\WBEM" 
05.
"C:\PROGRAM FILES\ALTIRIS\SOFTWARE VIRTUALIZATION AGENT\" 
06.
"C:\APPS\ORACLE\ORA92\BIN" 
07.
"C:\APPS\ORACLE\JRE\1.3.1\BIN" 
08.
"C:\APPS\ORACLE\JRE\1.1.8\BIN" 
09.
"C:\APPS\ORACLE\DEV6I\BIN" 
10.
"C:\APPS\ORACLE\DEV6I\JDK\BIN" 
11.
"C:\WINDOWS\SYSTEM32" 
12.
 
13.
(=19:28:35  D:\temp=) 
14.
>
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
Bitte warten ..
Mitglied: 54487
17.04.2008 um 19:30 Uhr
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.
Bitte warten ..
Mitglied: Biber
17.04.2008 um 19:40 Uhr
@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
Bitte warten ..
Mitglied: rddomain
18.04.2008 um 08:25 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Dateien zusammenführen inkl. finden von doppelten Einträgen (3)

Frage von miczar zum Thema Batch & Shell ...

Windows Server
gelöst MagicInfo und Path (2)

Frage von agowa338 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...