ufo2012
Goto Top

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
"%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 face-smile

"set "Von=Directory=C:\Lotus\Notes" "


grüßle

ufo2012

Content-ID: 93625

Url: https://administrator.de/forum/batch-problem-suchen-und-ersetzen-in-einer-ini-datei-93625.html

Ausgedruckt am: 23.12.2024 um 00:12 Uhr

bastla
bastla 05.08.2008 um 11:44:01 Uhr
Goto Top
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):
@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%
Bitte beachten: Wenn die Variable %username% nicht aufgelöst werden soll, muss sie mit doppelten Prozentzeichen geschrieben werden.

Grüße
bastla
ufo2012
ufo2012 05.08.2008 um 12:33:59 Uhr
Goto Top
Hallo bastla,

danke für die schnelle Antwort, aber funktioniert leider nicht.


Fehlermeldung:
"Input-Fehler: Für die Dateierweiterung ".vbs@echo" gibt es kein Skriptmodul.
FINDSTR: /c wurde ignoriert"


und der Inhalt schaut dann so aus:


"

\Lotus\Notes


\Lotus\Notes\Data\W32

"

Kann es seien, da ich noch Win2000 verwende, dass dies Probleme bereitet?

grüßle

ufo2012
bastla
bastla 05.08.2008 um 12:40:36 Uhr
Goto Top
Hallo ufo2012!

Nur zur Sicherheit: Der von mir gepostete Batch ist eigenständig zu verwenden und nicht mit dem ersten Batch zu kombinieren ...

Grüße
bastla
ufo2012
ufo2012 05.08.2008 um 12:54:09 Uhr
Goto Top
Hallo bastla,

stimmt, ich habe es in die bestehende batchdatei hineinkopiert.

Soweit, so gut, ich habe jetzt ein bißchen hin und her probiert, aber

leider ändert sich gar nichts. (oder ich übersehe etwas)


grüßle

ufo2012
bastla
bastla 05.08.2008 um 13:09:52 Uhr
Goto Top
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:
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Datei%").ReadAll:fso.CreateTextFile("%Datei%",True).Write Replace(T,"%Von%","%Nach%",1,-1,1)  
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
ufo2012
ufo2012 05.08.2008 um 14:08:02 Uhr
Goto Top
Hi bastla,

Ja es klappt, tausend Danke dafür. Erspart mir sehr viel arbeit.

Danke nochmals


grüßle

ufo2012