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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 72329
Url: https://administrator.de/contentid/72329
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
4 Kommentare
Neuester Kommentar
Moin ahe,
noch zwei Versuche mehr, dann hättest Du es herausbekommen...
So herum fünktioniert es (bei mir am CMD-Prompt) schön sichtbar:
Entsprechend in Deinem Batch mit...
Sollte dieses bei Dir klappen, dann kannst Du als "scharfe" Zeile
Und vorher evtl alle ";;" durch ";" ersetzen...
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
noch zwei Versuche mehr, dann hättest Du es herausbekommen...
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
...
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
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.
Gruß
Biber
ä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