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, 2493 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
Batch & Shell
gelöst Ähnliche Dateinamen zusammen verarbeiten (2)

Frage von JT-131 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch - Datei aus Ordner einlesen mit Ausnahmen! (4)

Frage von Daedrafaction zum Thema Batch & Shell ...

Windows Server
gelöst Einzelne Dateien auf einem Server haben auf einmal keine Berechtigungen mehr (7)

Frage von StefanKittel zum Thema Windows Server ...

Batch & Shell
gelöst Powershell: Mehrere Domains einlesen (9)

Frage von Agilolfinger zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(3)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
SAN, NAS, DAS
MSA 2050 RAID Konfig (21)

Frage von Leo-le zum Thema SAN, NAS, DAS ...

Hosting & Housing
CNAME auf FTP funkt nicht mehr (7)

Frage von Wintektiv zum Thema Hosting & Housing ...

Netzwerkmanagement
Suche eine Software für Cloudverwaltung (6)

Frage von tsunami zum Thema Netzwerkmanagement ...