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

Datei auslesen und bestimmte Wörter in neue Datei schreiben mit Batch

Frage Entwicklung Batch & Shell

Mitglied: teklan

teklan (Level 1) - Jetzt verbinden

13.10.2007, aktualisiert 18.10.2012, 6594 Aufrufe, 6 Kommentare

Hallo,

ich habe hier eine große Datei mit vielen Kryptischen Zeichen, aber auch normalen Buchstaben:
(Beispiel-datei-Ausschnitt) "einlesedatei.txt"

...
"name" "-424 25744 582"
"wert" "4 3 24"
"pfad" "daten/name1.rst"
"klname" "sarg_wert12g"
"pfad" "logs/name2.pop"
...

...so, ich möchte nun daraus eine neue Datei, die folgendes Beinhaltet:

/daten/datei1.rst
/logs/datei2.pop

und so weiter, je nachdem wieviele datei-angaben mit .rst oder .pop in der Datei stehen. Wie kann ich das am einfachsten realisieren? Habe leider kaum Ahnung von Batch...bisher hatte ich das etwa gebaut:

@echo off
set PF=einlesedatei.txt
findstr /C:".rst" %PF% > rst.txt
findstr /C:".pop" %PF% > pop.txt
copy rst.txt+pop.txt alle.txt

dadurch habe ich dann eine datei, mit alles Zeilen wo ".rst" und ".pop" vorkommt:
z.B.:

"pfad" "daten/name1.rst"
"pfad" "daten/name1.rst"
"pfad" "daten/name1.rst"
"pfad" "logs/name2.pop"
"pfad" "logs/name2.pop"

Das wäre schritt 1 ^^ ...aber wie kann ich jetzt erreichen das ich eine Datei daraus bekomme die nur:

"pfad" "daten/datei1.rst"
"pfad" "logs/datei2.pop"

beinhaltet(also doppelte Einträge raus)...und dann jeweils -"pfad" "- und -"- (am ende) lösch,t und ein "/" vorne dranhängt?

Kann mir da jemand weiterhelfen helfen?

lg
Mitglied: bastla
13.10.2007 um 14:41 Uhr
Hallo teklan und willkommen im Forum!

Falls Du nicht tatsächlich vorhast (wie in Deinem Beispiel) aus "name1.rst" ein "datei1.rst" zu machen, könnte das so klappen:
01.
@echo off & setlocal 
02.
set "Ein=D:\Ein.txt" 
03.
set "Aus=D:\Aus.txt" 
04.
 
05.
if exist "%Aus%" del "%Aus%" 
06.
set Zuletzt=- 
07.
for /f "tokens=2" %%i in ('findstr ".rst .pop" "%Ein%"^|sort') do call :ProcessLink "%%~i" 
08.
goto :eof 
09.
 
10.
:ProcessLink 
11.
if %1==%Zuletzt% goto :eof 
12.
set Zuletzt="%~1" 
13.
(echo /%~1)>>"%Aus%"
"D:\Ein.txt" wäre dabei Deine "große Datei".

Grüße
bastla
Bitte warten ..
Mitglied: teklan
13.10.2007 um 16:19 Uhr
Super! Das ist genau das was ich suchte!!!

Vielen Dank! ....nur eine Frage hätte ich noch...er findet zwar
jetzt alle "name1.rst" und "name2.pop"
...aber er findet auch "irgendwas_rst" ...das liegt wohl an der angabe "findstrr ".rst .pop""
..hab schon versucht das selber hinzubekommen duch ändern der
Syntax von findstr ..aber kamen nur Fehlermeldungen ;) ...kennst du die
richtige Syntax...oder muss man die "irgendwas_rst" erst danach rausfilter/löschen?

Edit: Und noch eine kleine Sache: Bei Ausführung wird "FINDSTR: Fehler beim Schreiben" angezeigt, und in der letzten Zeile der Ausgabedatei erscheint nur das "/" ;)


Vielen Dank aber schonmal!!
Bitte warten ..
Mitglied: bastla
13.10.2007 um 17:09 Uhr
Hallo teklan!

Ändere die "findstr"-Schreibweise auf
01.
findstr "\.rst \.pop" "%Ein%"
Bei Ausführung wird "FINDSTR: Fehler beim Schreiben" angezeigt, und in der letzten Zeile der Ausgabedatei erscheint nur das "/" ;)
Mit den aus Deinem ersten Posting entnommenen Testdaten erhalte ich keine derartige Fehlermeldung.

Du könntest das "@echo off" auf "@echo on" ändern und den Batch so aufrufen:
01.
Batchname > D:\Log.txt
In der damit erstellten "D:\Log.txt" könntest Du dann versuchen, dem Fehler auf die Spur zu kommen. Wenn Du
01.
Batchname > D:\Log.txt 2>&1
schreibst, werden auch die Fehlermeldungen in der Log-Datei protokolliert.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
13.10.2007 um 17:21 Uhr
... Nachtrag: Damit das Filtern mehrfach vorhandener Einträge sicherer wird, sollte eine temporäre Liste erstellt werden. Dann ergibt sich folgender Batch:
01.
@echo off & setlocal 
02.
set "Ein=D:\Ein.txt" 
03.
set "Aus=D:\Aus.txt" 
04.
 
05.
set "T=%Temp%\Unsortiert.txt" 
06.
if exist "%T%" del "%T%" 
07.
for /f "tokens=2" %%i in ('findstr "\.rst \.pop" "%Ein%"') do (echo %%~i)>>"%T%" 
08.
 
09.
set Zuletzt=- 
10.
if exist "%Aus%" del "%Aus%" 
11.
for /f "delims=" %%i in ('sort "%T%"') do call :ProcessLink "%%~i" 
12.
del "%T%" 
13.
goto :eof 
14.
 
15.
:ProcessLink 
16.
if %1==%Zuletzt% goto :eof 
17.
set Zuletzt="%~1" 
18.
(echo /%~1)>>"%Aus%"
Grüße
bastla

[Edit] Korrektur: In der letzten Zeile muss die Ausgabe nach "%Aus%" erfolgen. Außerdem ist "%Aus%" vorweg zu löschen. [/Edit]
Bitte warten ..
Mitglied: bastla
13.10.2007 um 17:29 Uhr
... Nachtrag zum Nachtrag: Ich habe noch notwendige Korrekturen vorgenommen.

Grüße
bastla
Bitte warten ..
Mitglied: teklan
13.10.2007, aktualisiert 18.10.2012
hey danke,

das findstr "\.str \.pop" klappt super, und das hat auch den Fehler behoben...die batch ist bestimmt
irgendwie durcheinandergekommen, da in der ausgangsdatei auch viele kryptsiche Zeichen waren.
Nunja auf jeden Fall klappt jetzt alles prima! Vielen Dank nochmal!

...jetzt möchte ich diese batch nurnoch ein bisschen erweitern...aber das schreibe ich ihn neuem Tread, da es anderes "Thema" ist, und für andere Leute dadurch denk ich leichter gefunden wird!

Link zu dem neuen Thema: http://www.administrator.de/forum/eine-datei-in-meine-batch-datei-ziehe ...

Gruss
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Variable per Batch auslesen und in Registry schreiben (1)

Frage von Zendara zum Thema Batch & Shell ...

PHP
gelöst TXT Datei auslesen und bestimmte Zeilen in Variable setzen (11)

Frage von 126594 zum Thema PHP ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Windows 10
Windows für Privatanwender "nicht mehr handhabbar" (35)

Frage von FA-jka zum Thema Windows 10 ...

LAN, WAN, Wireless
Komplett neues Netzwerk, Ubiquiti WLAN, Router, Switch (15)

Frage von Freak-On-Silicon zum Thema LAN, WAN, Wireless ...

Backup
Backup Wochen- Monats- Jahressicherung (13)

Frage von Meterpeter zum Thema Backup ...

RedHat, CentOS, Fedora
Fedora, RedHat, Centos: DNS-Search Domain setzen (13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...