mario.steinberg

Doppelte Path Einträge mittels Batchfile entfernen und Path mittels setx neu setzen

Hall,

ich habe folgendes Problem. Ich möchte in einem Batchfile einige Systemvariablem mittels setx setzen und zusätzlich die Pathvariable erweiteren.
Das Batchfile wird bei jedem Login aufgerufen weshalb ich schaue, ob der hinzuzufügende Pfad bereits im Path vorhanden ist. Das funktioniert auch schon ganz gut.

Problematisch ist, dass sich der Path beim Aufruf von set aus der Systemvariable Path und der (usersprzifischen) Umgebungsvariable zusammen setzt und deshalb nach jetzigen Stand, die Einträge der Umgebungsvariable, anschl. doppelt im Path vorhanden sind. Diese möchte ich jetzt aus dem Path entfernen. Meine Idee war erstmal den Inhalt der Pathvariable in eine Datei zu schreiben. Jeden Eintag in eine neue Zeile und nacher alles wieder zusammen zu bauen ohne doppelte Einträge zu berücksichtigen. Allerdings bekomme ich es schon nicht hin jeden Eintrag aus der Pathvariable mit einem anschl.Zeilenumbruch in eine Datei zu schreiben.

@echo off
setlocal enabledelayedexpansion

set NewPath=c:\test

for /f "tokens=1* delims=;" %%A in ('echo %PATH%') do (  
	REM if /i %%A EQU "%NewPath%" goto NEXT  
	echo %%A. >> tmp.txt
	echo. >>tmp.txt
	)

echo PATH NICHT GEFUNDEN
set "Path=%Path%;%NewPath%"  
setx Path "%Path%" -m  

:NEXT

del tmp.txt

Würde mich freunen, wenn jemand den einen oder anderen guten Vorschlag für mein Problem hat und mir evtl. sogar erklären kann, warum das mit Zeilenumbruch nicht funktioniert.

Danke schon mal und Gruß
Mario
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 173063

Url: https://administrator.de/forum/doppelte-path-eintraege-mittels-batchfile-entfernen-und-path-mittels-setx-neu-setzen-173063.html

Ausgedruckt am: 05.07.2025 um 23:07 Uhr

60730
60730 14.09.2011 um 09:47:51 Uhr
Moin,


  • Das mit dem @echo off ist nicht wirklich mein Ding...
  • setlocal enabledelayedexpansion ist für mich - ohne Kaffee im Kopp auch nicht wirklich an der stelle verständlich

Und da du schon bemerkt hast, dass es via Set nicht so einfach funktioniert - nimm dich den anderen Weg zu den Infos...

reg query HKEY_CURRENT_USER\Environment /v path

bzw:
for /f "skip=3 tokens=2,* delims=;" %%a in ('reg query HKEY_CURRENT_USER\Environment /v path') do echo %%a  
Und den anderen Ast findest du sicherlich auch...

Ps: Wir sprechen aber schon von Windows NT 3.51?

Gruß
Biber
Biber 14.09.2011 um 10:30:29 Uhr
Moin Mario.Steinberg,

das Teilproblem "jeden Eintrag aus der Pathvariable mit einem anschl.Zeilenumbruch in eine Datei zu schreiben" könntest du wie folgt lösen.

[.Demo am CMD-Prompt; führendes ">" nicht mit eingeben]
>@for %i in ( "%path:;=" "%" ) do @echo %~i
[Ausgabe]
C:\Oracle\Home\11.2\11.2.0\client_1\bin
C:\Oracle\Home\10.2\bin
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
.....

In einem Batchschnipsel und mit Umleitung in eine Datei (falls erforderlich) dann sinngemäß

...
(for %%i in ( "%path:;=" "%" ) do echo %%~i) >X:\pfad\derPathInZeilen.txt  
..

Grüße
Biber
Mario.Steinberg
Mario.Steinberg 14.09.2011 um 11:26:22 Uhr
Hallo Timo, hallo Biber,

danke für eure Antworten.
Eine ähnliche Zeile wie for %i in ( "%path:;=" "%" ) do @echo %~i habe ich bereits im Forum gefunden und auch ausprobiert. Das Problem dabei waren dann aber Pfadangaben mit Leerzeichen. Hier scheine die offensichtliche keine Probleme zu machen. Wieso?

Weiß jemand warum das mit dem echo. >>tmp.txt nicht funktioniert hat? Es sah aus als würde er den Zeilenumbruch immer nur am Ende machen.

Wie baue ich mir am einfachsten einen neuen Path zusammen ohne doppelte Einträge zusammen, wenn ich den Inhalt der Pathvariable in dei Textdatei geschrieben habe?
Muss ich überhaupt über die Textdatei gehen?
pieh-ejdsch
pieh-ejdsch 14.09.2011 um 11:43:21 Uhr
moin Mario,

Warum denn so Kompliziert?
(echo %path:;=;&echo\%)|find /i "c:\windows;">nul&& echo Schon drin  

Gruß Phil
99045
99045 14.09.2011 um 11:51:22 Uhr
Hi,

Zitat von @Mario.Steinberg:
Muss ich überhaupt über die Textdatei gehen?

nein, ich würde versuchen, das so zu lösen:
path | findstr /i "gesuchter Pfad/Teilpfad" > nul  && echo vorhanden (setx nicht ausführen)  || @echo nicht vorhanden (setx ausführen)

Damit entfernst du zwar keine doppelten Einträge, verhinderst aber, dass neue dazukommen.

Gruß
60730
60730 14.09.2011 um 12:51:39 Uhr
moin,

an dieser Stelle würde ich gerne einen Break machen...

  • das Frühstück "die Pflicht" ist verdaut und bevor wir zur Kür kommen...
  • Die Korinther und fast alle Koriphäen sind schon da und bevor die sich auch noch die Whiskeyflasche ins Müsli kippen, obwohl die ab jetzt in die Bolognese Spaghettigehören..

  • Was ist das Ziel und warum denkst du, es muß so wie du es beschreibst ablaufen?

Denn "frickeln/friemeln/Bibern/Pitschen/Bastlan/[nickdeinerWahl]" ist immer eine nette Abwechslung, aber es gibt ganz sicher bessere quoten, wenn der Grund == das Ziel bekannt sind.

Also - was genau soll es denn werden?

Gruß
Mario.Steinberg
Mario.Steinberg 15.09.2011 um 13:48:04 Uhr
Hallo,

Ich habe mehrere Clients in einer Domäne auf denen beim Einloggen ein Skript aufgerufen wird. Dieses kann u.U. mehrfach am Tag angepasst sein.
In diesem sollen nun auch eineige Systemvariablen gesetzt und der Path erweitert werden. Soweit zum Plan.

Konnte leider die Tage nicht viel am Skript weiter bauen. Deshalb bin ich auch noch nicht weiter. Versuche jetzt mal den Ansatz von Phil.Vielleicht kann er mir kurz erklären was diese kryptisch anmutende Zeile macht?

Gruß
60730
60730 15.09.2011 um 14:25:22 Uhr
?
vielleicht kann er mir kurz erklären was diese kryptisch anmutende Zeile macht?

(echo %path:;=;&echo\%)|find /i "c:\windows;">nul&& echo Schon drin

Zerlege es doch einfach...
(echo %path:;=;&echo\%)
  • macht was genau?

(echo %path:;=;&echo\%)|find /i "c:\windows;"
  • und diese Erweiterung?

Vielleicht wird es so deutlicher:

&& == vorheriger Befehl liefert alles banane zurück
|| == der vorherige Befehl war grütze

Ich habe mehrere Clients in einer Domäne auf denen beim Einloggen ein Skript aufgerufen wird.
Dieses kann u.U. mehrfach am Tag angepasst sein.
In diesem sollen nun auch eineige Systemvariablen gesetzt und der Path erweitert werden. Soweit zum Plan.
Der Plan ist aber nix genaues...

  • Ein Skript, das als startupscript läuft und das prüft die Variablen und setzt Sie im Fehlerfall mit setx -m
Und wie das geht hat dir der Phil ja gezeigt... Und das echo gegen setx austauschen - das kannst du sicherlich.

Gruß