Batch: Datei mit Datei durchsuchen
Hallo
Ich habe folgendes Script was ich nun verändern möchte. Kurz zum aktuellen Stand:
In der Datei products.json sollen jeweils 2 Werte geändert werden. Im Anschluss soll die Datei als product.json in ein Zip Archiv gepackt werden.
Was ich nun ändern möchte:
Statt die Werte Suchen1/Ersetzen1 und Suchen2/Ersetzen2 in der Batch einzugeben will ich dafür eine andere Datei (TXT oder CSV) verwenden. Grund dafür ist das immer mehrere Farben ersetzt werden müssen.
Die TXT zum ersetzen würde ich gern so anlegen
Suchen1;Ersetzen1;Suchen2;Ersetzen2
Farbwelt;Farbwelt rot;#ffffff;#ff0000
Farbwelt;Farbwelt gelb;#ffffff;#f6ff00
Ist das möglich?? Kann mir jemand helfen?
hier das Script was mir derzeit hilft
Ich habe folgendes Script was ich nun verändern möchte. Kurz zum aktuellen Stand:
In der Datei products.json sollen jeweils 2 Werte geändert werden. Im Anschluss soll die Datei als product.json in ein Zip Archiv gepackt werden.
Was ich nun ändern möchte:
Statt die Werte Suchen1/Ersetzen1 und Suchen2/Ersetzen2 in der Batch einzugeben will ich dafür eine andere Datei (TXT oder CSV) verwenden. Grund dafür ist das immer mehrere Farben ersetzt werden müssen.
Die TXT zum ersetzen würde ich gern so anlegen
Suchen1;Ersetzen1;Suchen2;Ersetzen2
Farbwelt;Farbwelt rot;#ffffff;#ff0000
Farbwelt;Farbwelt gelb;#ffffff;#f6ff00
Ist das möglich?? Kann mir jemand helfen?
hier das Script was mir derzeit hilft
@echo off & setlocal enabledelayedexpansion
set "Datei=products.json"
set "t=Temp.tmp"
set "Suchen1=Farbwelt"
set "Ersetzen1=Farbwelt rot"
set "Suchen2=#ffffff"
set "Ersetzen2=#ff0000"
if exist "%t%" del "%t%"
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
move "%t%" "D:\neu\product.json"
goto :WEITER_IM_BATCH
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
if not defined L >>"%t%" echo\& goto :eof
set WriteLine1=!L:%Suchen1%=%Ersetzen1%!
set WriteLine2=!WriteLine1:%Suchen2%=%Ersetzen2%!
>>"%t%" echo !WriteLine2!
goto :eof
:WEITER_IM_BATCH
echo } >> D:\neu\product.json
CD /D "C:\Program Files (x86)\7-Zip"
7z.exe a D:\neu\%Ersetzen1%.zip "D:\neu\product.json"
EXIT
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 572048
Url: https://administrator.de/forum/batch-datei-mit-datei-durchsuchen-572048.html
Ausgedruckt am: 04.04.2025 um 13:04 Uhr
5 Kommentare
Neuester Kommentar
Moin,
Schmeiss Zeile 4-7 raus und ändere Zeile 10 wie folgt ab:
Datei.CSV muss natürlich ggfs ersetzt werden, dass Skip=1 brauchst du nur, falls die Daten wie in deinem Beispiel Überschriften haben.
Ungetestet, aber sollte so passen.
Edit: Der Output darf natürlich erst statt finden, nachdem die Schleife zum ersetzen durch ist. Zeile 19 muss also auch raus, bzw hinter die Schleife, s.o.
Gruß Thomas
Zitat von @dergringo73:
Was ich nun ändern möchte:
Statt die Werte Suchen1/Ersetzen1 und Suchen2/Ersetzen2 in der Batch einzugeben will ich dafür eine andere Datei (TXT oder CSV) verwenden. Grund dafür ist das immer mehrere Farben ersetzt werden müssen.
Die TXT zum ersetzen würde ich gern so anlegen
Suchen1;Ersetzen1;Suchen2;Ersetzen2
Farbwelt;Farbwelt rot;#ffffff;#ff0000
Farbwelt;Farbwelt gelb;#ffffff;#f6ff00
Ist das möglich?? Kann mir jemand helfen?
Möglich klar... ob das mit Batch noch sinnvoll ist, sei mal dahingestellt.Was ich nun ändern möchte:
Statt die Werte Suchen1/Ersetzen1 und Suchen2/Ersetzen2 in der Batch einzugeben will ich dafür eine andere Datei (TXT oder CSV) verwenden. Grund dafür ist das immer mehrere Farben ersetzt werden müssen.
Die TXT zum ersetzen würde ich gern so anlegen
Suchen1;Ersetzen1;Suchen2;Ersetzen2
Farbwelt;Farbwelt rot;#ffffff;#ff0000
Farbwelt;Farbwelt gelb;#ffffff;#f6ff00
Ist das möglich?? Kann mir jemand helfen?
Schmeiss Zeile 4-7 raus und ändere Zeile 10 wie folgt ab:
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do (
set "Line=%%i"
for /f "Tokens=1-4 usebackq Skip=1 Delims=;" %%a in ("Datei.CSV") do (
set Suchen1=%%a
set Ersetzen1=%%b
set Suchen2=%%c
set Ersetzen2=%%d
call :ProcessLine
)
>>"%t%" echo !WriteLine2!
)
Ungetestet, aber sollte so passen.
Edit: Der Output darf natürlich erst statt finden, nachdem die Schleife zum ersetzen durch ist. Zeile 19 muss also auch raus, bzw hinter die Schleife, s.o.
Gruß Thomas
Nein, die Klammer sitzt schon richtig, allerdings muss die For-Schleife in Zeile 19 noch vor die Schleife mit den Ersetzungen, sonst wird %L% natürlich immer neu erstellt.
Warum nutzt du eigentlich mehrere Variablen, um die Ersetzungen durchzuführen? Bleib doch einfach bei %Line%.
Teste mal. Falls die Ausgabe immer noch nicht wie gewünscht ist, bitte auch mal ein Textbeispiel für die products.json und die Csv-Datei posten, damit ich hier mit den selben Bedingungen testen kann.
Warum nutzt du eigentlich mehrere Variablen, um die Ersetzungen durchzuführen? Bleib doch einfach bei %Line%.
@echo off & setlocal enabledelayedexpansion
set "Datei=products.json"
set "t=Temp.tmp"
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do (
for /f "tokens=1* delims=:" %%a in ("%%i") do set "Line=%%b"
for /f "Tokens=1-4 usebackq Skip=1 Delims=;" %%a in ("Datei.CSV") do (
set Suchen1=%%a
set Ersetzen1=%%b
set Suchen2=%%c
set Ersetzen2=%%d
call :ProcessLine
)
>>"%t%" echo !Line!
)
move "%t%" "D:\neu\product.json"
goto :WEITER_IM_BATCH
:ProcessLine
if not defined Line >>"%t%" echo\& goto :eof
set Line=!Line:%Suchen1%=%Ersetzen1%!
set Line=!Line:%Suchen2%=%Ersetzen2%!
goto :eof
:WEITER_IM_BATCH
echo } >> D:\neu\product.json
CD /D "C:\Program Files (x86)\7-Zip"
7z.exe a D:\neu\%Ersetzen1%.zip "D:\neu\product.json"
EXIT
Teste mal. Falls die Ausgabe immer noch nicht wie gewünscht ist, bitte auch mal ein Textbeispiel für die products.json und die Csv-Datei posten, damit ich hier mit den selben Bedingungen testen kann.