ahe
Goto Top

Eintrag in der Umgebungsvariable Path löschen

Löschen eines Pfadeintrages aus der Umgebungsvariablen Path während eines Batchlaufs.

Hallo,

ich habe da ein Problem mit dem Löschen eines Eintrages in der Umgebungsvariablen Path während des Batchlaufs.

Dieses Löschen des Pfades ist Teil einer Deinstallationsroutine, die ein gewisser Softwarehersteller (nicht MS) vermurxt hat. Es werden nur ein paar Dateien und Registry-Einträge gelöscht, die Pfade, Umgebungsvariablen und weiteren störenden Verzeichnisse, Dateien und Registry-Einträge bleiben allerdings bestehen. Bei einer Aktualisierung müssen die genannten Dinge aber alle verschwinden, da die Anwendung ansonsten nicht korrekt instaliert wird bzw. dann zwei ggfs. verschiedene Suchpfade vorhanden sind!

Vorab: (Windows XP SP2)
Es ist kein Problem einen Pfadeintrag mit Hilfe der Tools setx.exe oder pathman.exe (aus den Windows RescourcKits oder Support Tools) zu löschen, z. B. mit:
pathman.exe /rs c:\gnuffz\murks; (ich ziehe pathman setx vor...)

Bei diesen Tools wird die Systemvariable dauerhaft in der Registry geändert, ist allerdings erst beim nächsten Start der Konsole aktiv.

Registry-Zweig:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Name: Path
Typ: Reg_SZ
Wert: c:\windows; c:\windows\sytem32;c:\gnuffz\murks;C:\WINDOWS\System32\Wbem; ...

Der gesuchte Pfad ist dabei als Variable Home_Dir der Anwendung ebenfalls gesetzt und kann daher auch als Parameter für pathman verwendet werden:
pathman.exe /rs %Home_Dir%\murks;

Jetzt zum eigentlichen Problem:
Mit Hilfe des folgenden Befehls schreibe ich den Inhalt der Pfadvariablen (path) ohne den misliebigen Eintrag c:\gnuffz\murks in eine Datei test.txt.
echo %path:c:\gnuffz\murks=% >test.txt

Dies funktioniert soweit, aber... ich möchte dies natürlich mit meinem Parameter von oben machen: %Home_Dir% (der Installationspfad ist manchmal etwas unterschiedlich... "c:\" oder "c:\program files" oder "c:\programme" oder ... )
Wenn es denn 'mal klappt, dann möchte ich die Datei auslesen und den Inhalt als neue Pfadvariable path setzen z. B. mit:
for /f %%i in ('type test.txt') do set path=%%i

Die folgenden Zeilen funktionieren alle nicht!
echo %path:%Home_Dir%\murks=% >test.txt
Ergebnis in test.txt:
%path:c:\gnuffz\murks=%

echo %path:!%Home_Dir%!\murks=% >test.txt
Ergebnis in test.txt: (der Eintrag wird nicht gelöscht!)
c:\windows; c:\windows\sytem32;c:\gnuffz\murks;C:\WINDOWS\System32\Wbem; ...

echo %path:!Home_Dir!\murks=% >test.txt
Ergebnis in test.txt: (der Eintrag wird nicht gelöscht!)
c:\windows; c:\windows\sytem32;c:\gnuffz\murks;C:\WINDOWS\System32\Wbem; ...

Vielleicht habt Ihr ja noch eine Idee, irgendetwas machei ich mit der "verzögerten Variablenexpansion" falsch...

(Schön wäre am Schluss noch, wenn es auch kein überschüssiges Semikolon mehr da wäre... aber das ist nur Kosmetik...)


mfg
Axel

Content-Key: 72329

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

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

Member: Biber
Biber Oct 30, 2007 at 21:06:39 (UTC)
Goto Top
Moin ahe,

noch zwei Versuche mehr, dann hättest Du es herausbekommen... face-wink

So herum fünktioniert es (bei mir am CMD-Prompt) schön sichtbar:
>@echo !path:%homedir%=@@@@@@@@@@@@@@@@@@@@!

Entsprechend in Deinem Batch mit...
@echo off & Setlocal EnableDelayedExpansion
.....
:: .... und eigentlich dieselbe Zeile, also ohne mehr % oder !.... 
echo !path:%homedir%\Murks=@@@@@@@@@@@@@@@@@@@@!
pause
...
Sollte dieses bei Dir klappen, dann kannst Du als "scharfe" Zeile
Set Path=!path:%homedir%\Murks=!
...in Deine Batchdatei schreiben...ohne dieses Hin- und her in die Txtdatei.
Und vorher evtl alle ";;" durch ";" ersetzen...
Set Path=%path:;;=;%

That's all.

Okay, aber für ein zeilenweises Ausgeben der Einzelpfade in %PATH% hätte ich zur Not auch eine Lösung. *gg

Grüße
Biber
Member: ahe
ahe Oct 30, 2007 at 22:18:44 (UTC)
Goto Top
Danke Biber für deine Mühe, aber leider funktioniert es (an meinem Rechner) nicht...

Ich habe die folgende Zeile eingegeben (vorher set Mypath=%path%, damit nix kaputt geht face-smile)
path=c:\windows; c:\windows\sytem32;c:\gnuffz\murks;C:\WINDOWS\System32\Wbem;

@echo !Mypath:%homedir%=@@@@@@@@@@@@@@@@@@@@!

Das Ergebnis ist allerdings:

!Mypath:c:\gnuffz=@@@@@@@@@@@@@@@@@@@@!

anstelle von:
c:\windows; c:\windows\sytem32;\murks;C:\WINDOWS\System32\Wbem;
(also ohne c:\gnuffz)

Ich habe mir daraufhin noch eine Batch nach deinen obigen Zeilen gebastelt (dieses Mal auch mit Setlocal EnableDelayedExpansion face-smile), aber ohne Erfolg... face-sad

Ich denke ich probiere es morgen früh noch einmal an meinem Testrechner mit meinen Testdaten und meld' mich dann noch 'mal...

Erst einmal, gute Nacht.
Axel
Member: Biber
Biber Oct 31, 2007 at 08:32:08 (UTC)
Goto Top
Moin ahe,

ähhem...ja. Das Testen mit %MyPath% statt mit %Path% ist natürlich äußerst empfehlenswert.
Hätte ich vielleicht auch gestern erwähnen sollen...

Ich habe es eben noch mal probiert - bei mir tut es reproduzierbar.
>set mypath=path=c:\windows; c:\windows\sytem32;c:\gnuffz\murks;C:\WINDOWS\System32\Wbem;

(= 9:26:53  D:\temp=)
>set murx=c:\gnuffz\murks

(= 9:27:51  D:\temp=)
>@echo !mypath:%murx%=!
path=c:\windows; c:\windows\sytem32;;C:\WINDOWS\System32\Wbem;

Gruß
Biber
Member: ahe
ahe Oct 31, 2007 at 09:03:37 (UTC)
Goto Top
Hallo Biber,

ich habe jetzt auf meinem Testrechner Folgendes gemacht:

@echo off & Setlocal EnableDelayedExpansion

set homedir=c:\gnuffy
set oldpath=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\gnuffy\Murks;

echo !oldpath:%homedir%\Murks=@@@@@@@@@@@@@@@@@@@@!

Set oldpath=!oldpath:%homedir%\Murks=!

Ergebnis: face-smile
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;@@@
;...

Ich habe etwas gebraucht, bis mir auffiel, dass ich die Variable %homedir% im Setting Home_Dir genannt hatte und darum immer das Folgende, falsche Ergebnis hatte:
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\gnuffy@@@
;...

Ich werde jetzt erst einmal die Zeilen in mein komplettes Sript übernehmen und sehen, was passiert.

Noch einmal, vielen Dank, für deine geduldige Hilfe.

mfg
Axel