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, 6555 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
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 ...

Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...