Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Bedingt Zeilen aus .txt kopieren per Batch

Frage Entwicklung Batch & Shell

Mitglied: knechtibus

knechtibus (Level 1) - Jetzt verbinden

29.07.2009, aktualisiert 10:07 Uhr, 6765 Aufrufe, 8 Kommentare

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.

Mit freundlichen Grüßen knechtibus
Mitglied: bastla
29.07.2009 um 11:34 Uhr
Hallo knechtibus!

Was wäre denn in Deinem Beispiel oben der "jeweils andere Fall" bzw der "mittlere Block", und wie sollte das Ergebnis aussehen?

Grüße
bastla
Bitte warten ..
Mitglied: knechtibus
29.07.2009 um 11:50 Uhr
Hallo bastla,

ja das ist vielleicht noch nicht ganz konkret wie ich mir das vorstelle. Es soll also geprüft werden ob die Zeile mit "-1" oder "-2" abschließt. Wenn dies der Fall ist soll geprüft werden ob es die selbe Zeile nocheinmal mit der jeweils anderen Zahl am Ende gibt. Wie z.B. hier:

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

Nur wenn diese Kombination auftritt, sollen die 4 Zeilen in die dat.txt kopiert werden. In allen anderen Fällen(keine -1 oder -2 am Ende oder die selbe Zeile nur mit -1 oder nur mit -2) soll nichts weiter geschehen. Hoffe mein Problem ist etwas klarer geworden.

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: bastla
29.07.2009 um 11:56 Uhr
Hallo knechtibus!

Das hieße, dass nur der Teil ab/nach ">>" bzw "<<" zu berücksichtigen wäre?

Grüße
bastla
Bitte warten ..
Mitglied: knechtibus
29.07.2009 um 11:59 Uhr
Hallo bastla,

ja das könnte man so sagen. Das wäre eigentlich der relevante Teil der zu berücksichtigen wäre. Die >> bzw << wären jedoch auch wichtig.

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: bastla
29.07.2009 um 12:05 Uhr
Hallo knechtibus!

Dann könnte es (vorausgesetzt, es gibt nur ein einziges Leerzeichen vor dem entsprechenden Teil) etwa so gehen:
01.
@echo off & setlocal 
02.
set "Ein=D:\link.txt" 
03.
set "Aus=D:\dat.txt" 
04.
 
05.
if exist "%Aus%" del "%Aus%" 
06.
for /f "delims=" %%i in ('findstr /e "\-1 \-2" "%Ein%"') do set "Zeile=%%i" & call :ProcessLine 
07.
goto :eof 
08.
 
09.
:ProcessLine 
10.
for /f "tokens=1*" %%i in ("%Zeile%") do set "Vergl=%%j" 
11.
if "%Vergl:~-1,1%"=="1" (set "Vergl=%Vergl:~,-1%2") else (set "Vergl=%Vergl:~,-1%1") 
12.
findstr /e /c:"%Vergl%" "%Ein%">nul || goto :eof 
13.
set "Zeile=%Zeile:<=^<%" 
14.
set "Zeile=%Zeile:>=^>%" 
15.
>>"%Aus%" echo %Zeile% 
16.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: knechtibus
29.07.2009 um 12:24 Uhr
Hallo bastla,

habe es gerade einmal mit einer verkürzten Version der link.txt versucht, in der nicht so viele Daten drinstehen. Leider geschieht beim ausführen der bat Datei nichts. Die Ausgabe Datei wird gelöscht, dann jedoch keine neue angelegt.
Mir ist übrigens eingefallen, dass beim Fehlen der "-1" bzw. "-2" am Ende der Zeile, diese Zeile auch in die dat.txt kopiert werden soll.
Vielleicht hast du ja noch ne Idee woran es liegen könnte. Sieht ja fast so aus als würde er erst gar nicht nach ProcessLine springen.

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: bastla
29.07.2009 um 12:40 Uhr
Hallo Knechtibus!

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
zur Verfügung habe, konnte ich auch nur damit testen - Ergebnis:
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
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:
01.
@echo off & setlocal 
02.
set "Ein=D:\link.txt" 
03.
set "Aus=D:\dat.txt" 
04.
 
05.
if exist "%Aus%" del "%Aus%" 
06.
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine 
07.
goto :eof 
08.
 
09.
:ProcessLine 
10.
for /f "tokens=1*" %%i in ("%Zeile%") do set "Vergl=%%j" 
11.
if "%Vergl:~-1,1%"=="1" ( 
12.
    set "Vergl=%Vergl:~,-1%2" 
13.
) else ( 
14.
    if "%Vergl:~-1,1%"=="2" ( 
15.
        set "Vergl=%Vergl:~,-1%1" 
16.
    ) else ( 
17.
        goto :Write 
18.
19.
20.
findstr /e /c:"%Vergl%" "%Ein%">nul || goto :eof 
21.
 
22.
:Write 
23.
set "Zeile=%Zeile:<=^<%" 
24.
set "Zeile=%Zeile:>=^>%" 
25.
>>"%Aus%" echo %Zeile% 
26.
goto :eof
und bringt mit obigen Testdaten dieses Ergebnis:
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
Grüße
bastla
Bitte warten ..
Mitglied: knechtibus
29.07.2009 um 13:31 Uhr
Hallo bastla,

vielen Dank für deine Hilfe. Es funktioniert nun einwandfrei, auch mit der Erweiterung! Habe die Leerzeichen am Ende jeder Zeile entfernt und sowohl die Batch Datei als auch die link.txt in ein anderes Verzeichnis verschoben und nun geht es. Scheinbar hat er sich an dem Verzeichnis gestört. Nochmals vielen Dank.

Mit freundlichen Grüßen
ein nun glücklicher knechtibus
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...