mike9677
Goto Top

Verzeichnis auf neue Dateien prüfen und den Namen dieser in eine Text-Datei schreiben

Hallo zusammen,

ich suche eine Möglichkeit ein Verzeichnis in relativ kurzen Abständen auf neue Dateien zu untersuchen und wenn welche gefunden wurden, den Namen dieser Dateien in eine Text-Datei zu schreiben.

Bsp.; Im Ordner Bilder liegen unzählige Dateien mit unterschiedlichen Formten. Jetzt kommt die Datei bild0815.jpg hinzu.
Diese soll nun in eine Text Datei geschrieben werden, die ich dann weiter verarbeiten möchte.

Ich habe schon Versuche unternommen, dass ich den Inhalt des Ordners Bilder in eine Text Datei schreiben ließ, dann eine weitere Datei in der Ordner Bilder kopiert habe und wieder den Inhalt in eine Text. Danach habe ich den Inhalt der beiden Text Dateien vergleichen lassen. Hat aber alles nicht zu 100 % funktioniert.

Evtl. hat jemand eine Möglichkeit für mich.

Grüß

Michael

Content-Key: 194256

Url: https://administrator.de/contentid/194256

Printed on: April 23, 2024 at 19:04 o'clock

Member: bastla
bastla Nov 14, 2012 at 20:39:14 (UTC)
Goto Top
Hallo mike9677 und willkommen im Forum!

Um zu überprüfen, welche neuen Zeilen in der Datei "Liste2.txt" gegenüber der Datei "Liste1.txt" enthalten sind, könntest Du folgenden CMD-Befehl versuchen:
findstr /vg:Liste1.txt Liste2.txt
Eine Möglichkeit für die dauernde Überwachung eines Ordners findest Du im Thread Automatische PDF-Erstellung und Mail-Versand aus einem Verzeichnis beschrieben.

Es wäre übrigens sinnvoll, etwas näher auf die Rahmenbedingungen (wieviele Dateien im Ordner, in welchem Zeitabstand soll geprüft werden, ...) einzugehen.

Grüße
bastla
Member: mike9677
mike9677 Nov 15, 2012 at 07:05:45 (UTC)
Goto Top
Hallo und Danke für die Antwort.

Mit dem beschriebenen CMD Befehl habe ich es bereits versucht.
Manchmal funktioniert es, manchmal nicht. Oder muss ich, wenn ich es als Batch-File ausführe, noch etwas ergänzen ?

Der Link zur automatischen PDF-Erstellung und das Skript, welches sich dort befindet, verstehe ich leider nicht ganz.
OK, ich sehe, wo ich den Pfad anpassen muss, um den zu überwachenden Ordner einzugeben.
Aber erstellt das Skript dann auch eine Text-Datei mit dem Namen der neu im Ordner entdeckten Datei und wo findet sich dann diese Text-Datei ?

zu den Rahmenbedingungen: Es befinden sich mehrere Tausend Dateien in dem zu überwachenden Ordner und es wird in unegelmäßigen Abständen immer etwas hinzugefügt. Die Prüfung sollte evtl. jede Stunde erfolgen.

Besten Dank
Member: mike9677
mike9677 Nov 15, 2012 at 07:40:51 (UTC)
Goto Top
Hallo
ich habe es jetzt gerade mit dem o.g. CMD Befehl noch mal versucht.
2 Text-Dateien erstellt, die eine mit 1,2,3 die andere mit 1,2,3,4.
Ergebnis des CMD Befehls war 4. gut

Jetzt habe ich noch mal 2 Text-Dateien erstellt, die eine mit dem Wort Hallo, die andere mit den Worten Hallo, Erde.
Ergebnis des CMD-Befehls war eine lehre Datei.
Member: pieh-ejdsch
pieh-ejdsch Nov 15, 2012 updated at 14:00:26 (UTC)
Goto Top
moin mike,

xcopy liest auch eine Exlude Liste aus das sähe in etwa so aus:
:@echo off
setlocal
set "Quelle=D:\Bilder\*.jpg"  

for /f "delims=" %%i in ("%Quelle%") do pushD "%%~dpi"  
if not exist exclude.txt 3>exclude.txt ping localhost -n 2 >nul 
xcopy /Lic "%Quelle%" Irgendetwas /Exclude:exclude.txt |find ":" >Neu.txt  
type Neu.txt >>Exclude.txt
popd

Oder es könnte eine Zeile in der Aufgabenplanung Stündlich so lauten:
C:\Windows\System32\cmd.exe /c " pushD "D:\Bilder" & xcopy /Lic "D:\Bilder\*.jpg" "WasNirgendsIst" /Exclude:Exclude.txt |find ":" >"Neu.txt" &type "Neu.txt">>"Exclude.txt" &popD"

Gruß Phil
Member: mike9677
mike9677 Nov 15, 2012 at 12:17:13 (UTC)
Goto Top
Hallo und Danke für die Hilfe,

wenn ich aber den zuerst genannten Code verwende, die Quelle anpasse und das ganze als Batch laufen lasse, sehe ich zwar kurz ein DOS Fenster, aber das war es dann.
Muss ich noch was anderes anpassen ?

und die Aufgabenplanung: was passiert durch diese Eintragungen ?
Wird hier eine .txt erzeugt und wo ?

Sorry für die vielen Fragen, aber ich bin hierin nicht so bewandert, sonst würde ich mich ja auch nicht an dieses Forum wenden.

Gruß
mike
Member: pieh-ejdsch
pieh-ejdsch Nov 15, 2012 updated at 14:14:30 (UTC)
Goto Top
Die zweite Forschleife habe ich inklusive der fehlenden Klammer-zu entfernt.
Die Exclude.txt lies sich mit Pfad in Anführungszeichen nicht dem xcopy zum Auslesen übergeben, daher wird in das Verzeichnis der Exclude.TXT gesprungen (pushD).
In diesem Verzeichnis befindet sich dann auch die Neu.txt.

Für die Zeile der Aufgabenplanung muss vor der ersten Ausführung die Exclude.TXT per Hand erstellt werden damit der xcopy Befehl fehlerfrei funktioniert, ansonsten wird zur ersten Ausführung nur eine Leere Exclude.txt erstellt.

Gruß
Member: andimue
andimue Nov 15, 2012 at 14:14:51 (UTC)
Goto Top
Zitat von @mike9677:
ich habe es jetzt gerade mit dem o.g. CMD Befehl noch mal versucht.
2 Text-Dateien erstellt, die eine mit 1,2,3 die andere mit 1,2,3,4.
Ergebnis des CMD Befehls war 4. gut

Jetzt habe ich noch mal 2 Text-Dateien erstellt, die eine mit dem Wort Hallo, die andere mit den Worten Hallo, Erde.
Ergebnis des CMD-Befehls war eine lehre Datei.

Wenn es bei dir mit "Hallo" und "Hallo, Erde" (ich hoffe, in 2 Zeilen, oder?) nicht geht muss da wohl was schiefgelaufen sein. Das muss funktionieren.

Gruß
Andi
Member: mike9677
mike9677 Nov 15, 2012 at 14:38:13 (UTC)
Goto Top
Hallo pieh-ejdsch,

das funktioniert jetzt tadellos.

Es gibt in dem Ordner Bilder noch jede Menge Unterordner. Wenn ich da was reinkopiere, gibt er mir das nicht aus.
Und könnte man die Ablage der Exclude.txt sowie Neu.txt auf c:/ueberwachung umbiegen ??

Vielen Dank
mike
Member: pieh-ejdsch
pieh-ejdsch Nov 15, 2012 updated at 14:56:43 (UTC)
Goto Top
an den Xcopy muss ein /s für Subdirectories angefügt werden.

Im Batch muss Zeile 05 angepasst werden/etwa so lauten (die For kommt dann weg)
pushD C:\ueberwachung

für die Aufgabenplanung Entsprechend: ... Pushd c:\ueberwachung & xcopy /Lics ... anpassen.

Gruß Phil
Member: mike9677
mike9677 Nov 15, 2012 updated at 15:11:47 (UTC)
Goto Top
Meinst du so:

:@echo off
setlocal
set "Quelle=D:\JD\*.jpg"

for /f "delims=" %%i in ("%Quelle%") do pushD "%%~dpi"
if not exist exclude.txt 3>exclude.txt ping localhost -n 2 >nul
xcopy /s /Lic "%Quelle%" Irgendetwas /Exclude:exclude.txt |find ":" >Neu.txt
type Neu.txt >>Exclude.txt
popd

OK... habs hinbekommen.
Gibt es jetzt noch eine Möglichkeit, keine Pfadangabe in der Neu.txt zu bekommen ??
Also einfach den Namen der Datei ?

mike
Member: pieh-ejdsch
pieh-ejdsch Nov 15, 2012 updated at 16:53:22 (UTC)
Goto Top
ohne Pfadangabe muss dann wieder eine Forschleife Drumherumgebastelt werden, womit wir wieder fast beim Anfang wären.

@echo off
setlocal
set "Quelle=D:\Bilder\*.jpg"  

pushD "D:\Bilder\"  
if not exist exclude.txt 3>exclude.txt ping localhost -n 2 >nul 

(
 for /f "delims=" %%i in ('xcopy /Lic "%Quelle%" Irgendetwas /Exclude:exclude.txt ^|find ":" ') do (  
  >&3 echo %%~nxi
  >&4 echo %%~nxi
)) 3>Neu.txt 4>>Exclude.txt

popd


Gruß Phil
Member: mike9677
mike9677 Nov 15, 2012 updated at 20:28:13 (UTC)
Goto Top
Hi, ICH WERD' VERRÜCKT !!!!

Wenn du mir jetzt noch verrätst, wie ich einen weitern Ordner als Quelle hinzufügen kann (besonders wenn der Ordner "Bilder 02" heißt, mit einem Leerzeichen), bzw eine Erweiterung der Dateiendung (.jpg .raw .tiff) einbauen kann ??

Besten Dank an dich, pieh-ejdsch !!!!
Member: pieh-ejdsch
pieh-ejdsch Nov 16, 2012 at 08:49:27 (UTC)
Goto Top
moin mike,

Dafür werden die Verzeichnisse mit Wildcard per call als Parameter in eine Subroutine übergeben.
Bei Sonderzeichen )(,;&^LEERZEICHEN im Pfad werden Anführungszeichen drumherum gesetzt:
:@echo off

pushD "D:\Dort wo exclude.txt ist\"  
if not exist exclude.txt 3>exclude.txt ping localhost -n 2 >nul 

 rem LogDatei fuehren
3>>"%~n0-LOG.txt" >&3 echo %date% %time% ---- Start ----  

 rem Die Pfade der Subroutine als Parameter Übergeben
2>>"%~n0-LOG.txt" 3>Neu.txt 4>>Exclude.txt call :SUB D:\Bilder\*.jpg D:\Bilder\*.tif D:\Bilder\*.bmp "D:\Bilder 02\*.jpg"  

 rem LogDatei fuehren
<Neu.txt 3>>"%~n0-LOG.txt" (for /f %%i in ('find /c /v "" ') do >&3 echo %%i Datei^(en^) hinzugekommen)    
3>>"%~n0-LOG.txt" >&3 echo %date% %time% ------------------- Ende ------------------  

popd
exit /b 

:SUB
set "N="  
<nul >&2 set /p ="%~1	"  
(
 for /f "delims=" %%i in ('xcopy /Lics %1 Irgendetwas /Exclude:exclude.txt ^|find ":" ') do (  
  >&3 echo %%~nxi
  >&4 echo %%~nxi
  set /a n+=1
))
>&2 (if defined N (echo %N% Dateie^(en^)) else echo()
if "%~2" neq "" shift &goto :sub  

Gruß Phil
Member: mike9677
mike9677 Nov 16, 2012 at 10:17:10 (UTC)
Goto Top
Cool, besten Dank !!

Wenn ich jetzt nach Ausführung der Anwendung mit einer Zeitverzögerung von 2 Min. eine weitere .bat starten möchte, gäbe es dafür auch noch eine Möglichkeit ?

Überglückliche Grüß
mike
Member: pieh-ejdsch
pieh-ejdsch Nov 16, 2012 at 10:39:20 (UTC)
Goto Top
da gibt es mehrere möglichkeiten je nach OS bzw. cmd Equipment
timeout /?
ping /?
waitfor /?
sleep /?

 rem zB. vor der exit Zeile 17
timeout /t 120 /nobreak 
D:\scripte\anderebatch.cmd

Gruß Phil
Member: mike9677
mike9677 Nov 16, 2012 updated at 12:26:01 (UTC)
Goto Top
Hi,

wenn ich es so mache (timeout und waitfor funktionieren nicht, erhalte ich in der Neu.TXT den Eintrag : FINDSTR: Suchzeichenfolge zu lang.
Aber die Unterschiede.bat wird ausgeführt, wenn auch wohl die Zahl (Zeit bis zur Ausführung) keine Auswirkung hat.

 :@echo off

pushD "D:\"  
if not exist exclude.txt 3>exclude.txt ping localhost -n 2 >nul 

 rem LogDatei fuehren
3>>"%~n0-LOG.txt" >&3 echo %date% %time% ---- Start ----  

 rem Die Pfade der Subroutine als Parameter Übergeben
2>>"%~n0-LOG.txt" 3>Neu.txt 4>>Exclude.txt call :SUB D:\JD\*.jpg "D:\JD 02\*.bmp"   

 rem LogDatei fuehren
<Neu.txt 3>>"%~n0-LOG.txt" (for /f %%i in ('find /c /v "" ') do >&3 echo %%i Datei^(en^) hinzugekommen)    
3>>"%~n0-LOG.txt" >&3 echo %date% %time% ------------------- Ende ------------------  

 rem zB. vor der exit Zeile 17 

ping /t 1200 /nobreak  
D:\unterschiede.bat

popd
exit /b 

:SUB
set "N="  
<nul >&2 set /p ="%~1	"  
(
 for /f "delims=" %%i in ('xcopy /Lics %1 Irgendetwas /Exclude:exclude.txt ^|find ":" ') do (  
  >&3 echo %%~nxi
  >&4 echo %%~nxi
  set /a n+=1
))
>&2 (if defined N (echo %N% Dateie^(en^)) else echo()
if "%~2" neq "" shift &goto :sub  
Member: pieh-ejdsch
pieh-ejdsch Nov 16, 2012 updated at 17:12:53 (UTC)
Goto Top
Hast Du denn einmal ping /? in die CMD-Line eingegeben?
Der Befehl, um ca. 2 min per ping zu warten, lautet:
ping localhost -n 120 >nul
Die Wartezeit und der Batchaufruf sollten aber erst nach popD sowie vor (dem nur vorsorglichen) exit /b erfolgen.
Ist dann etwas sauberer Programmiert.

... erhalte ich in der Neu.TXT den Eintrag : FINDSTR: Suchzeichenfolge zu lang.
Aber nicht von diesem Batch, da hier kein Findstr verwendet wird - höchstens Find.
Eventuell schreibt unterschiede.bat in die neu.txt.

PS. den Doppelpunkt vor echo off kannst Du entfernen, wenn alles sauber durchläuft. Steht ja nur zum testen/Bugtracking auf der CMD-line Da.

Gruß Phil
Member: SilentTom
SilentTom Nov 25, 2012 at 23:32:45 (UTC)
Goto Top
Genau dafür gibt es ein kleines praktisches Programm namens MD5 FILE HASHER von Digital-Tronic.

Mit dem Programm können vollautomatische Dateiüberprüfungen erstellt werden, um in zeitgesteuerten Abständen beliebige Dateien, Dateitypen und ganze Ordner zu überwachen. Dabei stehen umfangreiche Filterfunktionen und Ausnahmeregeln zur Verfügung, um beispielsweise alle JPG, BMP usw. Dateien eines bestimmten Verzeichnises zu überwachen. Geänderte, gelöschte und neu erstelle Dateien werden auf Wunsch als PopUp-Meldung mitgeteilt und können zusätzlich als TXT-Datei abgespeichert werden. Die Erkennung von Dateiänderungen wird mit Hilfe von MD5 Prüfsummen festgestellt. Es wird also von jeder existierenden Datei eine Art Fingerabdruck erstellt, der bei späteren Untersuchungen verglichen wird. Stimmt dieser nicht überein, so wurde die Datei geändert. Neue Dateien werden ebso aufgelistet.

Das Programm gibts auf digital-tronic.de und ist in Deutsch und Englisch verfügbar. Auf YouTube sind auch Videos bzw. Tutorials online.
Member: mike9677
mike9677 Nov 26, 2012 at 07:08:55 (UTC)
Goto Top
Schön, das Programm werde ich mir mal bei Gelegenheit noch ansehen.

Bin aber für den Moment mit der bisherigen Lösung voll und ganz zufrieden, da ich alles (Prüfung auf neue Inhalte, erstellen einer .txt und versenden der .txt per email) in einer BATCH am Laufen habe.

Hier sei nochmal gesagt: vielen vielen Dank an phil !!!

Gruß
mike