Top-Themen

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, 2504 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
Mehrere CSV-Dateien mit einem VBA Makro einlesen und automatisch verarbeiten
Frage von armini92VB for Applications3 Kommentare

Hallo! Ich schreibe gerade meine Bachelorarbeit und bekomme täglich zahlreiche Messergebnisse im CSV-Format ausgegeben. Diese muss ich manuell konvertieren, ...

Batch & Shell
Alle Dateien aus einem Ordner verarbeiten
gelöst Frage von neo243Batch & Shell2 Kommentare

Hallo Leute, ich wollte aus einem Ordner alle dateien per ffmpeg Encoden bekomme dann aber leider folgenden Fehler: "%~a" ...

Batch & Shell
Inhalt einer Datei als Tabelle einlesen
gelöst Frage von SmogKielBatch & Shell2 Kommentare

Hallo, ich möchte gerne eine Datei zeilenweise einlesen und als Tabelle speichern. Hat jemand eine Idee wie das funktioniert? ...

Batch & Shell
Batch - Datei aus Ordner einlesen mit Ausnahmen!
gelöst Frage von DaedrafactionBatch & Shell4 Kommentare

Hallo! Ich bin halb am verzweifeln Ich möchte bestimmte Datei aus einem Ordner auslesen und in eine Datei speichern. ...

Neue Wissensbeiträge
Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 4 StundenInternet3 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registierunf von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 11 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 22 StundenWindows 103 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 1 TagSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement16 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless16 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...