Ich habe einige Batch-Skripte, die auf Dateien warten. Die Warteschleife wird mit der typischen IF EXISTS-Schleife ausgeführt:
:waitloop
IF EXISTS file.zip GOTO waitloopend
sleep.exe 60
goto waitloop
: waitloopend
Ich suche nach einer effizienteren Möglichkeit, auf Dateien zu warten. So etwas wie ein Befehl waitfile.exe, der blockiert und wartet, bis die Datei angezeigt wird. Intern sollte die FileSystemWatcher- Klasse verwendet werden, um das Programm beenden zu können, sobald die Datei angezeigt wird.
Unter Linux habe ich mein eigenes Perl-Skript, das intern Inotify verwendet.
Wissen Sie, ob es ein solches Tool gibt?
windows
command-line
batch-file
Francisco R.
quelle
quelle
Antworten:
Ihre Methode ist vorzuziehen und durchaus akzeptabel.
FileSystemWatcher
verschwendet Ressourcen, sogar mehr als Ihre Schleife.Selbst wenn Sie Ihre Schleife so eng wie mit einer Verzögerung von einer Sekunde machen, werden Sie in jedem Prozessmonitor, der die CPU- oder Festplattenlast misst, völlig unbemerkt bleiben.
Übrigens können Sie den
timeout
Befehl anstelle von verwendensleep.exe
.Außerdem haben Sie einige Tippfehler in Ihrem Code:
Einige Informationen zum Thema "Verschwendung von Ressourcen" finden Sie hier: /programming/239988/filesystemwatcher-vs-polling-to-watch-for-file-changes ; Der Hauptpunkt ist, dass es unzuverlässig sein könnte. Aber ich muss zugeben, meine Antwort stammt hauptsächlich aus jahrelanger Praxis und Erfahrung.
quelle
Ein typischer Dateisystemmonitor erkennt Dateierstellungen und wenn die Datei erstellt wird, während das Tool aktiv ist, erhalten Sie das Ereignis. Wenn Sie das Tool jedoch mit einer bereits vorhandenen Datei starten, gibt es keine nachfolgenden Erstellungsereignisse und das Tool wird ewig warten.
Es sieht so aus, als müssten Sie ein benutzerdefiniertes Tool implementieren, das zuerst prüft, ob die Datei bereits vorhanden ist, und wenn nicht, mit der Überwachung der Datei beginnt.
quelle
Verwenden Sie PowerShell, um auf die FileSystemWatcher-API zuzugreifen.
Hier zu finden: https://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084b
quelle