Per Batch XML ändern
Es gibt keine Probleme: Nur Herausforderungen!
Hallo, bei mir hängt es mal wieder.
Ich muss via Batch Einträge aus einer xml oder txt-Datei suchen und von false auf true setzen.
Ich habe folgenden Ansatz:
@echo on & Setlocal
:: Defintition
set Datei=FWA.txt
set Neudatei=Zeile_neu.txt
set NeueZeile="<add key="DisableDCSTrace" value="true" />"
:: Jede Zeile der Datei auslesen und an u_Prog. übergeben
for /f "delims=" %%i in (%Datei%) do call :processline "%%i"
goto :end
:processline
set Quelle=%1
:: Nach String suchen
echo %Quelle%|find "false"
:: Zeilen Schreiben in neue Datei
If %Errorlevel% == 1 echo %Quelle% >>%Neudatei%
If %Errorlevel% == 0 echo %NeueZeile% >>%Neudatei%
goto :eof
:eof
:end
:: Originaldatei wieder herstellen
del %Datei%
ren %Neudatei% %Datei%
Soweit funktioniert das auch, nur: Leider schreibt er mir in die neue Datei die Zeilen in " ".
Wie kann ich die Zeilen ohne Häckchen oben schreiben?
Über Hilfe bin ich wie immer dankbar.
Gruss der Nohouse303
Hallo, bei mir hängt es mal wieder.
Ich muss via Batch Einträge aus einer xml oder txt-Datei suchen und von false auf true setzen.
Ich habe folgenden Ansatz:
@echo on & Setlocal
:: Defintition
set Datei=FWA.txt
set Neudatei=Zeile_neu.txt
set NeueZeile="<add key="DisableDCSTrace" value="true" />"
:: Jede Zeile der Datei auslesen und an u_Prog. übergeben
for /f "delims=" %%i in (%Datei%) do call :processline "%%i"
goto :end
:processline
set Quelle=%1
:: Nach String suchen
echo %Quelle%|find "false"
:: Zeilen Schreiben in neue Datei
If %Errorlevel% == 1 echo %Quelle% >>%Neudatei%
If %Errorlevel% == 0 echo %NeueZeile% >>%Neudatei%
goto :eof
:eof
:end
:: Originaldatei wieder herstellen
del %Datei%
ren %Neudatei% %Datei%
Soweit funktioniert das auch, nur: Leider schreibt er mir in die neue Datei die Zeilen in " ".
Wie kann ich die Zeilen ohne Häckchen oben schreiben?
Über Hilfe bin ich wie immer dankbar.
Gruss der Nohouse303
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 122412
Url: https://administrator.de/contentid/122412
Ausgedruckt am: 20.11.2024 um 07:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo Nohouse303!
Wenn's denn wirklich (native) Batch sein muss, vielleicht so:
Grüße
bastla
Wenn's denn wirklich (native) Batch sein muss, vielleicht so:
@echo on & Setlocal
:: Defintition
set Datei=FWA.txt
set Neudatei=Zeile_neu.txt
set "NeueZeile=^<add key="DisableDCSTrace" value="true" /^>"
:: Jede Zeile der Datei auslesen und an u_Prog. übergeben
for /f "delims=" %%i in (%Datei%) do set "Zeile=%%i" & call :processline
:: Originaldatei wieder herstellen
move %Neudatei% %Datei%
goto :eof
:processline
::Sonderzeichen maskieren
set "Zeile=%Zeile:<=^<%"
set "Zeile=%Zeile:>=^>%"
:: Nach String suchen
echo "%Zeile%"|find "false">nul && (>>%Neudatei% echo %NeueZeile%) || (>>%Neudatei% echo %Zeile%)
goto :eof
bastla
Hallo Nohouse303!
Eigentlich hatte ich angenommen, Du wolltest die Zeile
durch die Zeile
ersetzen ...
Poste doch bitte (vorzugsweise mit "") einen (ausschnittsweisen) "Vorher-Nachher"-Vergleich der Datei.
Grüße
bastla
P.S.: Falls es nicht "nur" Batch sein muss (sondern auch etwas VBScript enthalten sein darf), könntest Du vielleicht auch den Batch von hier (entsprechend angepasst und mit "^" vor ">" bzw ">" in den "Such"-/"Ersetzungs"-Strings) verwenden ...
Eigentlich hatte ich angenommen, Du wolltest die Zeile
<add key="DisableDCSTrace" value="false" />
<add key="DisableDCSTrace" value="true" />
Poste doch bitte (vorzugsweise mit "") einen (ausschnittsweisen) "Vorher-Nachher"-Vergleich der Datei.
Grüße
bastla
P.S.: Falls es nicht "nur" Batch sein muss (sondern auch etwas VBScript enthalten sein darf), könntest Du vielleicht auch den Batch von hier (entsprechend angepasst und mit "^" vor ">" bzw ">" in den "Such"-/"Ersetzungs"-Strings) verwenden ...
Hallo Nhouse303!
Da Du Dich offfensichtlich um die "mehreren" Einträge selbst kümmern willst, nur ein Vorschlag für "diesen" Eintrag:
Beachte bitte, dass die Anführungszeichen in der "Von"- bzw "Nach"-Angabe verdoppelt werden müssen und Groß-/Kleinschreibung berücksichtigt wird.
Es wird übrigens keine Sicherungskopie (Temporärdatei) erstellt, sondern "in" der Originaldatei ersetzt.
Grüße
bastla
P.S.: Wenn Du für diesen Kommentar "Mit Zitat" anklickst, kannst Du die Verwendung der ""-Tags sehen ...
Da Du Dich offfensichtlich um die "mehreren" Einträge selbst kümmern willst, nur ein Vorschlag für "diesen" Eintrag:
@echo off & setlocal
set "Datei=FWA.txt"
set "R=%temp%\Repl.vbs"
set "Von=<add key=""DisableDCSTrace"" value=""false"" />"
set "Nach=<add key=""DisableDCSTrace"" value=""true"" />"
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Datei%").ReadAll:fso.CreateTextFile("%Datei%",True).Write Replace(T,"%Von%","%Nach%")
cscript //nologo %R%
Es wird übrigens keine Sicherungskopie (Temporärdatei) erstellt, sondern "in" der Originaldatei ersetzt.
Grüße
bastla
P.S.: Wenn Du für diesen Kommentar "Mit Zitat" anklickst, kannst Du die Verwendung der ""-Tags sehen ...
Hallo Nohouse303!
... anyhow, versuch es damit:
Was die anderen Einträge angeht: Durch wiederholte Verwendung der Zeilen 8 - 10 können auch mehrere Ersetzungen vorgenommen werden ...
Noch kurz zur Schreibweise des Suchbegriffes (%Alt%): Es müssen nicht nur (wie auch beim Ersetzungsstring %Neu%) die Umleitungszeichen "<" und ">" (durch "^") maskiert werden, sondern zusätzlich für die Verwendung mit "findstr" auch Anführungszeichen bzw "^" - in diesem Fall allerdings durch einen vorangestellten "\" ...
Grüße
bastla
Aber das was du gepostet hast ist VB-Script.
Gepostet habe ich Batch - das VBScript wird vom Batch erzeugt ...... anyhow, versuch es damit:
@echo off & Setlocal
:: Defintition
set Datei=FWA.txt
set Neudatei=Zeile_neu.txt
::Ersetzung
set "Alt=\^<add key=\"DisableDCSTrace\" value=\"false\" /\^>"
set "Neu=^<add key="DisableDCSTrace" value="true" /^>"
call :Replace
goto :eof
:Replace
:: Jede Zeile der Datei auslesen und an u_Prog. übergeben; dabei Leerzeilen erhalten
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"') do set "Zeile=%%j" & call :processline
:: Originaldatei wieder herstellen
move "%Neudatei%" "%Datei%"
goto :eof
:processline
if not defined Zeile (>>"%Neudatei%" echo\) & goto :eof
set "Zeile=%Zeile:<=^<%"
set "Zeile=%Zeile:>=^>%"
:: Nach String suchen
echo "%Zeile%"|findstr /i /c:"%Alt%">nul && set "Zeile=%Neu%"
>>"%Neudatei%" echo %Zeile%
goto :eof
Noch kurz zur Schreibweise des Suchbegriffes (%Alt%): Es müssen nicht nur (wie auch beim Ersetzungsstring %Neu%) die Umleitungszeichen "<" und ">" (durch "^") maskiert werden, sondern zusätzlich für die Verwendung mit "findstr" auch Anführungszeichen bzw "^" - in diesem Fall allerdings durch einen vorangestellten "\" ...
Grüße
bastla
@Biber
Danke für die Ergänzung - diese sollte aber nur nötig sein, wenn die Zeile "ohne Inhalt" nicht völlig leer ist (dieser Fall wird bereits durch Zeile 22 behandelt), sondern zumindest ein Leerzeichen enthält.
Grüße
bastla
Danke für die Ergänzung - diese sollte aber nur nötig sein, wenn die Zeile "ohne Inhalt" nicht völlig leer ist (dieser Fall wird bereits durch Zeile 22 behandelt), sondern zumindest ein Leerzeichen enthält.
Grüße
bastla