【问题标题】:monitor a folder for new files监视文件夹中的新文件
【发布时间】:2023-05-19 14:03:01
【问题描述】:

我想监控一个文件夹。 如果将文件添加到文件夹,则应运行 bat 文件。 目的是使事情自动化:当将 tiff 添加到文件夹时将其转换为 pdf,将其移动到目标文件夹并清空受监控的文件夹。

我试过了:

@echo off
:loop
if exist "c:\monitored_folder\*.tif" 

for %%a in ("c:\monitored_folder\*.tif") do (

move *.tif "c:\destination folder"
)
)
goto :loop

【问题讨论】:

  • 只是将任何新的 *.tif 文件移动到其他地方,您根本不需要 if existfor。只需:loopmove c:\monitored_folder\*.tif" "c:\destination folder\" 2>nultimeout 1goto :loop
  • 这是对两种解决方案的评论。当我使用 Stephan 的解决方案时,所有文件都被正确移动。当我使用 Angel115 的解决方案时,我必须将 goto moveFiles 替换为 :moveFiles。然后,正如我之前提到的,名称中带有空格或日期(???)的文件不会被传输。
  • 引用文件名也会处理空格(顺便说一句,我的评论中有错字(缺少引号):move "c:\monitored_folder\*.tif" "c:\destination folder\" 2>nul)。在Angel的情况下,应该是move "%%f" "c:\"

标签: batch-file imagemagick-convert


【解决方案1】:

试试这个:

@echo off

:moveFiles
for %%f in (c:\temp\*.tif) do (move %%f c:\)
timeout /t 1 /nobreak > NUL
goto moveFiles

您可以更改睡眠时间,但不要删除它,否则您的 CPU 使用率会飙升。

【讨论】:

  • 为什么不使用 Timeout 命令而不是调用 PS?
  • 是的,我们可以使用 timeout /t 1 /nobreak > NUL 以及重定向来防止屏幕上的输出。我更新了我的脚本
  • 运行脚本的用户是否有写入目标文件夹的权限?
  • 用户有权限。目的是在自动添加新文件时执行该操作。
  • 如果您想移动任何新文件,只需将“*.tif”替换为“*”
最近更新 更多