Batch Problem, Suchen und Ersetzen in einer ini-Datei
Hallo,
ich habe mich schon seit gestern durch das Forum durchgegraben, habe auch viele hinweise gefunden, nur fehlt mir noch ein kleiner Hinweis, um das Problem zu lösen.
Ich möchte gerne in einer ini-Datei eine komplette zeile löschen und durch eine neue ersetzen. Soll so ausschauen:
vorher:
[Notes]
DominoResLang=de
Directory=C:\Lotus\Notes
KitType=1
InstallType=2
WinNTIconPath=C:\Lotus\Notes\Data\W32
Timezone=-1
nachher:
[Notes]
DominoResLang=de
Directory=C:\Dokumente und Einstellungen\%username%\Eigene Dateien
KitType=1
InstallType=2
WinNTIconPath=C:\Lotus\Notes\Data\W32
Timezone=-1
ich habe jetzt schon herausgefunden wie man (leider) beide Zeilen ändert.
durch:
@echo off & setlocal enabledelayedexpansion
set "Datei=c:\test.ini"
set "Directory=C:\Lotus\Notes"
set "Nach=c:\Dokumente und Einstellungen\%username%\Eigene Dateien"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
goto :eof
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
if not defined L >>"%t%" echo\& goto :eof
goto :eof
Am liebsten würde ich gerne die Zeile "set "Directory=C:\Lotus\Notes" " so schreiben, leider funktioniert das dann nicht
"set "Von=Directory=C:\Lotus\Notes" "
grüßle
ufo2012
ich habe mich schon seit gestern durch das Forum durchgegraben, habe auch viele hinweise gefunden, nur fehlt mir noch ein kleiner Hinweis, um das Problem zu lösen.
Ich möchte gerne in einer ini-Datei eine komplette zeile löschen und durch eine neue ersetzen. Soll so ausschauen:
vorher:
[Notes]
DominoResLang=de
Directory=C:\Lotus\Notes
KitType=1
InstallType=2
WinNTIconPath=C:\Lotus\Notes\Data\W32
Timezone=-1
nachher:
[Notes]
DominoResLang=de
Directory=C:\Dokumente und Einstellungen\%username%\Eigene Dateien
KitType=1
InstallType=2
WinNTIconPath=C:\Lotus\Notes\Data\W32
Timezone=-1
ich habe jetzt schon herausgefunden wie man (leider) beide Zeilen ändert.
durch:
@echo off & setlocal enabledelayedexpansion
set "Datei=c:\test.ini"
set "Directory=C:\Lotus\Notes"
set "Nach=c:\Dokumente und Einstellungen\%username%\Eigene Dateien"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
goto :eof
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
if not defined L >>"%t%" echo\& goto :eof
"%t%" echo !L:%Directory%=%Nach%!
goto :eof
Am liebsten würde ich gerne die Zeile "set "Directory=C:\Lotus\Notes" " so schreiben, leider funktioniert das dann nicht
"set "Von=Directory=C:\Lotus\Notes" "
grüßle
ufo2012
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 93625
Url: https://administrator.de/contentid/93625
Ausgedruckt am: 19.11.2024 um 23:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo ufo2012!
Hier sollte (das für die Verarbeitung von Text besser geeignete) VBScript zusätzlich verwendet werden (auch, wenn es weiterhin ein Batch bleibt):
Bitte beachten: Wenn die Variable %username% nicht aufgelöst werden soll, muss sie mit doppelten Prozentzeichen geschrieben werden.
Grüße
bastla
Hier sollte (das für die Verarbeitung von Text besser geeignete) VBScript zusätzlich verwendet werden (auch, wenn es weiterhin ein Batch bleibt):
@echo off & setlocal
set "Datei=C:\test.ini"
set "Von=Directory=C:\Lotus\Notes"
set "Nach=Directory=c:\Dokumente und Einstellungen\%%username%%\Eigene Dateien"
set "R=%temp%\Repl.vbs"
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Datei%").ReadAll:fso.CreateTextFile("%Datei%",True).Write Replace(T,"%Von%","%Nach%")
cscript //nologo %R%
Grüße
bastla
Hallo ufo2012!
Mit den von Dir geposteten Testdaten klappt es bei mir ...
Um Groß-/Kleinschreibung der zu ersetzenden Zeile als Fehlerquelle auszuschließen, verwende bitte als Ersatz für die Zeile 8:
Wenn Du außerdem (nur zum Testen) in der ersten Zeile "echo off" durch "echo on" ersetzt und den Batch von der Kommandozeile startest, kannst Du den Ablauf nachvollziehen.
Grüße
bastla
Mit den von Dir geposteten Testdaten klappt es bei mir ...
Um Groß-/Kleinschreibung der zu ersetzenden Zeile als Fehlerquelle auszuschließen, verwende bitte als Ersatz für die Zeile 8:
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Datei%").ReadAll:fso.CreateTextFile("%Datei%",True).Write Replace(T,"%Von%","%Nach%",1,-1,1)
Grüße
bastla