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

Dateien einzeln einlesen und verarbeiten

Frage Entwicklung Batch & Shell

Mitglied: limitbreaker

limitbreaker (Level 1) - Jetzt verbinden

16.07.2012 um 19:58 Uhr, 2496 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 ...

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

C und C++
String einlesen in Array und wieder ausgeben von hinten (4)

Frage von Protected zum Thema C und C ...

Neue Wissensbeiträge
Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(1)

Information von DerWoWusste zum Thema Microsoft ...

Humor (lol)

Wohnt jemand in Belgien und kann nicht mehr ruhig ausschlafen?

(6)

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

Heiß diskutierte Inhalte
Hosting & Housing
Mailserver Software Empfehlungen (21)

Frage von sunics zum Thema Hosting & Housing ...

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

Frage von liquidbase zum Thema Voice over IP ...

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

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