我尝试在检测到文件更改后运行命令..我的问题是我使用的程序在创建文件时立即执行但尚未完全完成复制。
现在我已经使用timeout /t 180 /nobreak
我的脚本来临时修复这个问题,然后让它运行我想要的命令,但这并不适用于我处理的每个文件,有些文件会花费超过 180 秒的时间。
我想要完成的是通过本地网络将视频文件传输到共享文件夹,然后带有共享文件夹的 PC 检测到文件的更改/创建,然后等待文件完全传输,然后运行 .bat/.cmd
有什么办法可以做到这一点吗?任何帮助都非常感谢。谢谢!
答案1
你应该从另一个角度来看这个问题。
复制文件的脚本将知道传输何时完成,因此可以确定下一个操作何时开始。
因此您想从同一个脚本执行这两个操作。
这为您提供了两个选项:
远程执行
如果以足够的权限启动,PSExec 程序(可从微软下载)可以在目标机器上执行程序。复制完成后,它可以用于在远程机器上启动程序。
反向复制
您目前正在从源复制到目标。如果您从源共享文件所在的文件夹,您也可以在目标端启动复制。
答案2
您可以用于文件传输同步在主模式下(单向同步)。在传输文件时,它会创建临时文件,并且只有在成功时才将其重命名为实际文件名。如果您的监控程序会监视特定文件的扩展名,它会在传输完成时选择它,因此您可以立即运行下一个任务。可以使用 torrent 兼容程序(仅限于您的本地网络)完成类似的事情,其中实际文件只会出现在已完成的传输中。
PS
Syncthing
默认在预设的时间窗口内同步,但如果您需要立即传输,那么您可以使用其配套程序来调用syncthing-inotify
,这样在源位置上更改/创建/删除的任何内容都将立即复制到目标 PC 上。