Bedingt Zeilen aus .txt kopieren per Batch
Hallo miteinander,
würde gerne mittels Batch bedingt Zeilen aus einer link.txt Datei kopieren. Folgendermaßen sieht der Inhalt der .txt Datei aus:
Scenario_Online[0,0].Name=R001 <<S_BBB_LDN1-1
Scenario_Online[0,1].Name=R001 >>S_BBB_LDN1-1
Scenario_Online[0,12].Name=R007 <<S_BBG_LLG1-1
Scenario_Online[0,13].Name=R007 >>S_BBG_LLG1-1
Scenario_Online[0,14].Name=R008 <<V_LTT_LLG1-2
Scenario_Online[0,15].Name=R008 >>V_LTT_LLG1-2
Scenario_Online[0,14].Name=R010 <<UMUM 4004
Scenario_Online[0,15].Name=R010 >>UMUM 4004
Das bedingt kopieren in eine Datei dat.txt soll nun folgendermaßen aussehen. Es soll überprüft werden ob die Zeile mit einem "-1" oder "-2" abschließt. Wenn dies der Fall ist soll überprüft werden ob der jeweils andere Fall auch in der link.txt vorhanden ist. Wenn diese beiden Fälle, also "-1" und "-2" in der link.txt vorhanden sind(mittlerer Block des Beispielinhaltes), sollen diese Zeilen in die Datei dat.txt kopiert werden.
Sollte nur einer der beiden Fälle("-1" bzw. "-2") in der Datei vorhanden sein, soll nichts kopiert werden(erster Block des Beispielinhaltes). Ebenso soll verfahren werden wenn keine "-1" oder "-2" am Ende der Textzeile steht (letzter Block des Beispielinhaltes).
Das herausfiltern dieser obigen Zeilen aus einer größeren Textdatei mittels findstr ist mir bereits gelungen aber an dem benötigten bedingten kopieren hapert es bei mir leider noch.
Freu mich auf eure Antworten.
MfG knechtibus
würde gerne mittels Batch bedingt Zeilen aus einer link.txt Datei kopieren. Folgendermaßen sieht der Inhalt der .txt Datei aus:
Scenario_Online[0,0].Name=R001 <<S_BBB_LDN1-1
Scenario_Online[0,1].Name=R001 >>S_BBB_LDN1-1
Scenario_Online[0,12].Name=R007 <<S_BBG_LLG1-1
Scenario_Online[0,13].Name=R007 >>S_BBG_LLG1-1
Scenario_Online[0,14].Name=R008 <<V_LTT_LLG1-2
Scenario_Online[0,15].Name=R008 >>V_LTT_LLG1-2
Scenario_Online[0,14].Name=R010 <<UMUM 4004
Scenario_Online[0,15].Name=R010 >>UMUM 4004
Das bedingt kopieren in eine Datei dat.txt soll nun folgendermaßen aussehen. Es soll überprüft werden ob die Zeile mit einem "-1" oder "-2" abschließt. Wenn dies der Fall ist soll überprüft werden ob der jeweils andere Fall auch in der link.txt vorhanden ist. Wenn diese beiden Fälle, also "-1" und "-2" in der link.txt vorhanden sind(mittlerer Block des Beispielinhaltes), sollen diese Zeilen in die Datei dat.txt kopiert werden.
Sollte nur einer der beiden Fälle("-1" bzw. "-2") in der Datei vorhanden sein, soll nichts kopiert werden(erster Block des Beispielinhaltes). Ebenso soll verfahren werden wenn keine "-1" oder "-2" am Ende der Textzeile steht (letzter Block des Beispielinhaltes).
Das herausfiltern dieser obigen Zeilen aus einer größeren Textdatei mittels findstr ist mir bereits gelungen aber an dem benötigten bedingten kopieren hapert es bei mir leider noch.
Freu mich auf eure Antworten.
MfG knechtibus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121541
Url: https://administrator.de/contentid/121541
Ausgedruckt am: 20.11.2024 um 09:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo knechtibus!
Dann könnte es (vorausgesetzt, es gibt nur ein einziges Leerzeichen vor dem entsprechenden Teil) etwa so gehen:
Grüße
bastla
Dann könnte es (vorausgesetzt, es gibt nur ein einziges Leerzeichen vor dem entsprechenden Teil) etwa so gehen:
@echo off & setlocal
set "Ein=D:\link.txt"
set "Aus=D:\dat.txt"
if exist "%Aus%" del "%Aus%"
for /f "delims=" %%i in ('findstr /e "\-1 \-2" "%Ein%"') do set "Zeile=%%i" & call :ProcessLine
goto :eof
:ProcessLine
for /f "tokens=1*" %%i in ("%Zeile%") do set "Vergl=%%j"
if "%Vergl:~-1,1%"=="1" (set "Vergl=%Vergl:~,-1%2") else (set "Vergl=%Vergl:~,-1%1")
findstr /e /c:"%Vergl%" "%Ein%">nul || goto :eof
set "Zeile=%Zeile:<=^<%"
set "Zeile=%Zeile:>=^>%"
>>"%Aus%" echo %Zeile%
goto :eof
bastla
Hallo Knechtibus!
Da ich ja nur Deine Testdaten in dieser Version:
zur Verfügung habe, konnte ich auch nur damit testen - Ergebnis:
Bitte zu beachten, dass am Ende der Zeile kein Leerzeichen enthalten sein darf!
Für das Testen ist es sinnvoll, das "echo off" auf "echo on" zu ändern und den Batch direkt von der Kommandozeile zu starten - so werden alle Befehle vor der Ausführung angezeigt.
Die neue Anforderung, dass "beim Fehlen der "-1" bzw. "-2" am Ende der Zeile, diese Zeile auch in die dat.txt kopiert werden soll", ließe sich etwa so umsetzen:
und bringt mit obigen Testdaten dieses Ergebnis:
Grüße
bastla
Da ich ja nur Deine Testdaten in dieser Version:
Scenario_Online[0,0].Name=R001 <<S_BBB_LDN1-1
Scenario_Online[0,1].Name=R001 >>S_BBB_LDN1-1
Scenario_Online[0,12].Name=R007 <<S_BBG_LLG1-1
Scenario_Online[0,13].Name=R007 >>S_BBG_LLG1-1
Scenario_Online[0,14].Name=R008 <<S_BBG_LLG1-2
Scenario_Online[0,15].Name=R008 >>S_BBG_LLG1-2
Scenario_Online[0,14].Name=R010 <<UMUM 4004
Scenario_Online[0,15].Name=R010 >>UMUM 4004
Scenario_Online[0,12].Name=R007 <<S_BBG_LLG1-1
Scenario_Online[0,13].Name=R007 >>S_BBG_LLG1-1
Scenario_Online[0,14].Name=R008 <<S_BBG_LLG1-2
Scenario_Online[0,15].Name=R008 >>S_BBG_LLG1-2
Für das Testen ist es sinnvoll, das "echo off" auf "echo on" zu ändern und den Batch direkt von der Kommandozeile zu starten - so werden alle Befehle vor der Ausführung angezeigt.
Die neue Anforderung, dass "beim Fehlen der "-1" bzw. "-2" am Ende der Zeile, diese Zeile auch in die dat.txt kopiert werden soll", ließe sich etwa so umsetzen:
@echo off & setlocal
set "Ein=D:\link.txt"
set "Aus=D:\dat.txt"
if exist "%Aus%" del "%Aus%"
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine
goto :eof
:ProcessLine
for /f "tokens=1*" %%i in ("%Zeile%") do set "Vergl=%%j"
if "%Vergl:~-1,1%"=="1" (
set "Vergl=%Vergl:~,-1%2"
) else (
if "%Vergl:~-1,1%"=="2" (
set "Vergl=%Vergl:~,-1%1"
) else (
goto :Write
)
)
findstr /e /c:"%Vergl%" "%Ein%">nul || goto :eof
:Write
set "Zeile=%Zeile:<=^<%"
set "Zeile=%Zeile:>=^>%"
>>"%Aus%" echo %Zeile%
goto :eof
Scenario_Online[0,12].Name=R007 <<S_BBG_LLG1-1
Scenario_Online[0,13].Name=R007 >>S_BBG_LLG1-1
Scenario_Online[0,14].Name=R008 <<S_BBG_LLG1-2
Scenario_Online[0,15].Name=R008 >>S_BBG_LLG1-2
Scenario_Online[0,14].Name=R010 <<UMUM 4004
Scenario_Online[0,15].Name=R010 >>UMUM 4004
bastla