Dateien einzeln einlesen und verarbeiten
Hallo,
Dank der Hilfe von bastla habe ich mir folgende Batch zusammen gebastelt.
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
Dank der Hilfe von bastla habe ich mir folgende Batch zusammen gebastelt.
@echo off & setlocal
set Anzahl=0
for /f %%i in ('dir /s "Input\*.txt" 2^>nul^|findstr "Datei(en)"') do set "Anzahl=%%i"
>Output\Output1.txt findstr /g:Suchliste.txt Input\Input1.txt
set "Datei=Output\Output1.txt"
set "Suche=[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9][0-9][0-9]_[0-9][0-9] Analyst : Administrator"
set "T=%temp%\Output1.txt"
move "%Datei%" "%T%"
(for /f "usebackq delims=" %%i in ("%T%") do (
set "Zeile=%%i"
setlocal enabledelayedexpansion
echo !Zeile!|findstr /erc:"%Suche%">nul && (
echo !Zeile:~,-40!
) || (
echo !Zeile!
)
endlocal
))>"%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
Please also mark the comments that contributed to the solution of the article
Content-Key: 188109
Url: https://administrator.de/contentid/188109
Printed on: April 26, 2024 at 02:04 o'clock
9 Comments
Latest comment
So habs mal versucht hinzubekommen. Hier das Ergebniss ...
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
@echo off & setlocal
type >StrukturIn.txt
type >StrukturOrdner.txt
::Hier das Abspeichrn der Struktur
for /f "delims=" %%i in ('dir /a-s-h-d /b /s "Imput\*.txt"') do echo %%~i>>StrukturIn.txt
::Das ändern von Imput in Output
>"withunderlines" (for /f "usebackq delims=" %%i in ("StrukturIn.txt") do set "Line=%%i" ^
&setlocal enabledelayedexpansion ^
&set "Line=!Line:Imput=Output!" ^
&(echo(!Line!) ^
&endlocal
)
move "withunderlines" "StrukturOut.txt"
::Das erstellen der Output Struktur
for /f "delims=" %%i in ('dir /a-s-h-d /b /s "Imput\*.txt"') do echo %%~dpi>>StrukturOrdner.txt
::Das ändern von Imput in Output
>"withunderlines" (for /f "usebackq delims=" %%i in ("StrukturOrdner.txt") do set "Line=%%i" ^
&setlocal enabledelayedexpansion ^
&set "Line=!Line:Imput=Output!" ^
&(echo(!Line!) ^
&endlocal
)
move "withunderlines" "StrukturOrdner.txt"
::Erstellen der Ordnerstruktur
for /f %%i in ("StrukturOrdner.txt") do mkdir %%i
::Und jezt mit der Liste Weiterarbeiten so in etwa.
for /f %%i in ("StrukturOut.txt") do set "Datei=%%i" ^
&set "Suche=[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9][0-9][0-9]_[0-9][0-9] Analyst : Administrator" ^
&(for /f "usebackq delims=" %%i in ("StrukturIn.txt") do (
set "Zeile=%%i"
setlocal enabledelayedexpansion
echo !Zeile!|findstr /erc:"%Suche%">nul && (
echo !Zeile:~,-40!
) || (
echo !Zeile!
)
endlocal
))>"%Datei%"
::Löschen der unnötigen Datei
if exist StrukturIn.txt del StrukturIn.txt
if exist StrukturOut.txt del StrukturOut.txt
if exist StrukturOrdner.txt del StrukturOrdner.txt
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
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:
Grüße
bastla
[Edit] "
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:
@echo off & setlocal
set "Ein=D:\Input"
set "Aus=D:\Output"
set "Liste=D:\Suchliste.txt"
set "Suche=[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9][0-9][0-9]_[0-9][0-9] Analyst : Administrator"
for /f "delims=" %%a in ('dir /s/b/a-d "%Ein%\*.txt"') do set "PfadAlt=%%a" & call :ProcessFile "%%a"
goto :eof
:ProcessFile
call set "PfadNeu=%%PfadAlt:%Ein%=%Aus%%%"
for /f "delims=" %%i in ("%PfadNeu%") do md "%%~dpi" 2>nul
(for /f "delims=" %%i in ('findstr /g:"%Liste%" %1') do (
set "Zeile=%%i"
setlocal enabledelayedexpansion
echo !Zeile!|findstr /erc:"%Suche%">nul && (
echo !Zeile:~,-40!
) || (
echo !Zeile!
)
endlocal
))>"%PfadNeu%"
goto :eof
bastla
[Edit] "
usebackq
" in Zeile 13 entfernt [/Edit]
@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
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
Hallo Darkprodukt!
Grüße
bastla
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):Deswegen auch das umständliche ersetzen.
call set "PfadRel=%%PfadAlt:%cd%\Input\=%%"
md "Output\%PfadRel%\.." 2>nul
...
))>"Output\%PfadRel%"
bastla