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-Key: 93625

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

Printed on: April 24, 2024 at 17:04 o'clock

Member: bastla
bastla Aug 05, 2008 at 09:44:01 (UTC)
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
Member: ufo2012
ufo2012 Aug 05, 2008 at 10:33:59 (UTC)
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
Member: bastla
bastla Aug 05, 2008 at 10:40:36 (UTC)
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
Member: ufo2012
ufo2012 Aug 05, 2008 at 10:54:09 (UTC)
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
Member: bastla
bastla Aug 05, 2008 at 11:09:52 (UTC)
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
Member: ufo2012
ufo2012 Aug 05, 2008 at 12:08:02 (UTC)
Goto Top
Hi bastla,

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

Danke nochmals


grüßle

ufo2012