Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 6644 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 Text Datei bestimmte Bereiche lesen und in neue Text schreiben (3)

Frage von TurboD zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Eingabe in Datei schreiben (2)

Frage von MedicalAd zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows 10

Erneutes Starten eines Programmes mit Admin-Rechten

Tipp von Estefania zum Thema Windows 10 ...

Ubuntu

Ubuntu 17.10 steht zum Download bereit

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(3)

Information von thomasreischer zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

TK-Netze & Geräte
TK-Anlage VoIP - DECT Erweiterung (16)

Frage von Lynkon zum Thema TK-Netze & Geräte ...