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, 2459 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

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

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

Frage von krischanii zum Thema Microsoft Office ...

Microsoft Office
Alle CSV-Dateien mit neuem Datum in einem Ordner mit einem VBA Makro einlesen (1)

Frage von parlermo2102 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...