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

Dateien einzeln einlesen und verarbeiten

Frage Entwicklung Batch & Shell

Mitglied: limitbreaker

limitbreaker (Level 1) - Jetzt verbinden

16.07.2012 um 19:58 Uhr, 2475 Aufrufe, 9 Kommentare

Hallo,
Dank der Hilfe von bastla habe ich mir folgende Batch zusammen gebastelt.

01.
@echo off & setlocal 
02.
set Anzahl=0 
03.
for /f %%i in ('dir /s "Input\*.txt" 2^>nul^|findstr "Datei(en)"') do set "Anzahl=%%i" 
04.
>Output\Output1.txt findstr /g:Suchliste.txt Input\Input1.txt 
05.
set "Datei=Output\Output1.txt" 
06.
set "Suche=[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9][0-9][0-9]_[0-9][0-9]	Analyst  : 	Administrator" 
07.
set "T=%temp%\Output1.txt" 
08.
move "%Datei%" "%T%" 
09.
(for /f "usebackq delims=" %%i in ("%T%") do ( 
10.
    set "Zeile=%%i" 
11.
    setlocal enabledelayedexpansion 
12.
    echo !Zeile!|findstr /erc:"%Suche%">nul && ( 
13.
        echo !Zeile:~,-40! 
14.
    ) || ( 
15.
        echo !Zeile! 
16.
17.
    endlocal 
18.
))>"%Datei%"
Das Programm soll nun anstatt der Eingabe Input1.txt und Ausgabe Output1.txt alle Textdateien in dem Verzeichnis Input sowie den Unterverzeichnissen einlesen und die verarbeiteten Dateien in den Ordner Output ablegen. Die Ordnerstruktur hinter dem Ordner Input soll dabei erhalten bleiben. Das heißt falls noch nicht vorhanden soll das Programm im Ordner Output die Unterordner erstellen damit die Struktur gleich bleibt.
Ich habe am Anfang schonmal die Anzahl der Dateien eingelesen da ich mir dachte, dass man die Dateien mit einer For-Schleife von 1 bis %Anzahl% verarbeiten kann.
Gruß
limitbreaker
Mitglied: Darkprodukt
16.07.2012, aktualisiert um 21:08 Uhr
So habs mal versucht hinzubekommen. Hier das Ergebniss ...
01.
@echo off & setlocal  
02.
type >StrukturIn.txt 
03.
type >StrukturOrdner.txt 
04.
 
05.
::Hier das Abspeichrn der Struktur 
06.
for /f "delims=" %%i in ('dir /a-s-h-d /b /s "Imput\*.txt"') do echo %%~i>>StrukturIn.txt 
07.
 
08.
::Das ändern von Imput in Output 
09.
>"withunderlines" (for /f "usebackq delims=" %%i in ("StrukturIn.txt") do set "Line=%%i" ^  
10.
  &setlocal enabledelayedexpansion ^ 
11.
  &set "Line=!Line:Imput=Output!" ^ 
12.
  &(echo(!Line!) ^ 
13.
  &endlocal 
14.
15.
move "withunderlines" "StrukturOut.txt" 
16.
 
17.
::Das erstellen der Output Struktur 
18.
for /f "delims=" %%i in ('dir /a-s-h-d /b /s "Imput\*.txt"') do echo %%~dpi>>StrukturOrdner.txt 
19.
 
20.
::Das ändern von Imput in Output 
21.
>"withunderlines" (for /f "usebackq delims=" %%i in ("StrukturOrdner.txt") do set "Line=%%i" ^  
22.
  &setlocal enabledelayedexpansion ^ 
23.
  &set "Line=!Line:Imput=Output!" ^ 
24.
  &(echo(!Line!) ^ 
25.
  &endlocal 
26.
27.
move "withunderlines" "StrukturOrdner.txt" 
28.
 
29.
::Erstellen der Ordnerstruktur 
30.
for /f %%i in ("StrukturOrdner.txt") do mkdir %%i 
31.
 
32.
::Und jezt mit der Liste Weiterarbeiten so in etwa. 
33.
for /f %%i in ("StrukturOut.txt") do set "Datei=%%i" ^ 
34.
  &set "Suche=[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9][0-9][0-9]_[0-9][0-9]	Analyst  : 	Administrator" ^ 
35.
  &(for /f "usebackq delims=" %%i in ("StrukturIn.txt") do ( 
36.
    set "Zeile=%%i" 
37.
    setlocal enabledelayedexpansion 
38.
    echo !Zeile!|findstr /erc:"%Suche%">nul && ( 
39.
        echo !Zeile:~,-40! 
40.
    ) || ( 
41.
        echo !Zeile! 
42.
43.
    endlocal 
44.
))>"%Datei%" 
45.
 
46.
::Löschen der unnötigen Datei 
47.
if exist StrukturIn.txt del StrukturIn.txt 
48.
if exist StrukturOut.txt del StrukturOut.txt 
49.
if exist StrukturOrdner.txt del StrukturOrdner.txt 
50.
 
51.
exit 0
Da gibts bestimmt noch einiges zu verbessern, aber das hab ich mal soweit hinbekommen.
Ich versuche mal das noch weiter zu verbessern.

Ich weiß noch nicht wo ich deine Zeile 4 hinpacken muss ^^

Grüße
Darkprodukt
Bitte warten ..
Mitglied: bastla
16.07.2012, aktualisiert um 21:36 Uhr
Hallo Darkprodukt!

Guter Ansatz mit dem Ersetzen des "Input"-Pfades durch den "Output"-Pfad (ich hätte zwar eher den relativen Pfad unterhalb des "Input"-Ordners ermittelt und damit die Zielordnerstruktur erstellt, aber übernehme das trotzdem mal so); ansonsten sollte sich das etwas kompakter formulieren lassen - ungetestet etwa:
01.
@echo off & setlocal 
02.
set "Ein=D:\Input" 
03.
set "Aus=D:\Output" 
04.
set "Liste=D:\Suchliste.txt" 
05.
set "Suche=[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9][0-9][0-9]_[0-9][0-9]	Analyst  : 	Administrator" 
06.
 
07.
for /f "delims=" %%a in ('dir /s/b/a-d "%Ein%\*.txt"') do set "PfadAlt=%%a" & call :ProcessFile "%%a" 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
call set "PfadNeu=%%PfadAlt:%Ein%=%Aus%%%" 
12.
for /f "delims=" %%i in ("%PfadNeu%") do md "%%~dpi" 2>nul 
13.
(for /f "delims=" %%i in ('findstr /g:"%Liste%" %1') do ( 
14.
    set "Zeile=%%i" 
15.
    setlocal enabledelayedexpansion 
16.
    echo !Zeile!|findstr /erc:"%Suche%">nul && ( 
17.
        echo !Zeile:~,-40! 
18.
    ) || ( 
19.
        echo !Zeile! 
20.
21.
    endlocal 
22.
))>"%PfadNeu%" 
23.
goto :eof
Grüße
bastla

[Edit] "usebackq" in Zeile 13 entfernt [/Edit]
Bitte warten ..
Mitglied: limitbreaker
16.07.2012, aktualisiert um 21:29 Uhr
Hallo Zusammen,
Danke für den Lösungsansatz Darkprodukt.
Ich war grade dabei diesen zu verstehen als bastla dazu kam.
Habe dann das Skript von bastla getestet.
Die Ordnerstruktur wird soweit übernommen.
Leider steht in jeder Textdatei des Output Ordners:
findstr /g:Suchliste.txt "Pfad zur richtigen Input Datei\Datei.txt"

Also was bei dir in '' in Zeile 13 steht @ bastla.
Gruß
limitbreaker
Bitte warten ..
Mitglied: Darkprodukt
16.07.2012, aktualisiert um 21:38 Uhr
@bastla
Schön, wie immer schenke ich dir Bewunderung,
aber ist das nicht so das jezt Imput und Output dirkt auf der Patition D liegen müssen?

Ich dachte es sind einfach 2 Ordner die unterhalb der Batch liegen.
Deswegen auch das umständliche ersetzen.

Grüße
Darkprodukt
Bitte warten ..
Mitglied: bastla
16.07.2012, aktualisiert um 21:51 Uhr
Hallo limitbreaker!

Lass mal "usebackq" weg (habe ich inzwischen oben auch rausgenommen) ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
16.07.2012, aktualisiert um 22:03 Uhr
Hallo Darkprodukt!
aber ist das nicht so das jezt Imput und Output dirkt auf der Patition D liegen müssen?
Nein - es genügt, den jeweililgen Pfad anzugeben ...
Ich dachte es sind einfach 2 Ordner die unterhalb der Batch liegen.
Deswegen auch das umständliche ersetzen.
Könnten sie natürlich auch - dann würde ich den relativen Pfad ermitteln (obwohl auch hier das direkte Ersetzen möglich wäre):
01.
call set "PfadRel=%%PfadAlt:%cd%\Input\=%%" 
02.
md "Output\%PfadRel%\.." 2>nul 
03.
... 
04.
))>"Output\%PfadRel%"
Grüße
bastla
Bitte warten ..
Mitglied: limitbreaker
16.07.2012, aktualisiert um 21:51 Uhr
Hallo bastla,
Läuft, du alter bastler
Hallo Darkprodukt, die Ordnerstruktur hast du dir richtig verstanden.
Habe einfach in Skript vom bastla den Pfad angepasst.

Danke euch Beiden nochmal für eure Mühen & Hilfe.
Freue mich, das es nun läuft.

PS: Kann man irgentwie noch einfügen, dass er die Bearbeitungen nur durchführt werden sofern die jeweilige Datei im Output Ordner noch nicht vorhanden ist? (Denke da einfach an Bearbeitungszeit und Rechenleistung nach bei einer stetig anwachsenden Datei Anzahl.)

Gruß
limitbreaker
Bitte warten ..
Mitglied: bastla
16.07.2012, aktualisiert um 21:56 Uhr
Hallo limitbreaker!

Freut mich, wenn's passt ...
Kann man irgentwie noch einfügen, dass er die Bearbeitungen nur durchführt sofern die jeweilige Datei im Output Ordner noch nicht vorhanden ist?
Füge nach Zeile 11 ein:
if exist "%PfadNeu%" goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: limitbreaker
16.07.2012 um 21:58 Uhr
Alles klar bastla,
Fetten Danke nochmal.
Habs schon getestet läuft =)
Sehr gut!

Gruß
limitbreaker
Bitte warten ..
Ähnliche Inhalte
VB for Applications
gelöst Mehrere CSV Dateien aus verschiedenen Ordner einlesen via VBA (12)

Frage von mtufangil zum Thema VB for Applications ...

Batch & Shell
Nach Muster von Dateien, diese hochzählen (3)

Frage von Erik72 zum Thema Batch & Shell ...

Batch & Shell
gelöst Auslesen und Vergleichen Zweiter CSV Dateien Powershell (7)

Frage von Hainoon zum Thema Batch & Shell ...

Neue Wissensbeiträge
Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(2)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Viren und Trojaner

Neue Magazin Ausgabe: Malware und Angriffe abwehren

Information von Frank zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Systemdateien
Warum System auf "C:" (29)

Frage von DzumoPRO zum Thema Windows Systemdateien ...

Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Cloud-Dienste
gelöst Bitcoins minen über Nacht? (16)

Frage von 1410640014 zum Thema Cloud-Dienste ...

LAN, WAN, Wireless
Cisco SG200: Auf bestimmtem vLAN bestimmte TCP-Ports sperren (16)

Frage von SarekHL zum Thema LAN, WAN, Wireless ...