批量实时等待文件

Fra*_*o R 9 windows command-line batch-file

我有一些等待文件的批处理脚本。等待循环是通过典型的 IF EXISTS 循环完成的:

:waitloop
IF EXISTS file.zip GOTO waitloopend
sleep.exe 60
goto waitloop
: waitloopend
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更有效的等待文件的方式。类似于 waitfile.exe 命令,它会阻塞并等待文件出现。在内部,它应该使用FileSystemWatcher类以便能够在文件出现时立即退出。

在 Linux 中,我有自己的 Perl 脚本,它在内部使用 Inotify。

不知道有没有这样的工具?

Dan*_*dor 5

你的方法是更好的并且完全可以接受。 FileSystemWatcher浪费资源,甚至比你的循环还要多。

即使您将循环设置得像一秒延迟那样紧密,在任何测量 CPU 或硬盘负载的进程监视器中您仍然完全不会被注意到。

顺便说一句,您可以使用timeout命令而不是sleep.exe.

另外,您的代码中存在一些拼写错误:

:waitloop
IF EXIST "scanning.done" GOTO waitloopend
timeout /t 1
goto waitloop
:waitloopend
Run Code Online (Sandbox Code Playgroud)

有关“浪费资源”的一些信息可以在这里找到:https ://stackoverflow.com/questions/239988/filesystemwatcher-vs-polling-to-watch-for-file-changes ;要点是它可能不可靠。但我不得不承认,我的答案主要来自于多年的实践和经验。


小智 0

典型的文件系统监视器会检测文件创建,如果在工具处于活动状态时创建文件,您将收到该事件,但如果您使用现有文件启动该工具,则不会有后续创建事件,并且该工具将永远等待。

看起来您需要实现一个自定义工具,该工具将首先检查文件是否已存在,如果不存在则开始监视该文件。