下载文件夹监控批处理文件

3
我需要一个批处理文件,可以监控我的下载文件夹中新添加的文件,但只监测新的添加。类似以下内容:
:START  

NumOldFiles = GetNumberOfFilesOld  

Delay_30_Seconds  

NumNewFiles = GetNumberOfFilesNew  

if(NumFilesOld < NumFilesNew)  
  run_another_batch_file_I_wrote
  goto START
else
  goto START

我不想计算子文件夹,只想计算目录和目录中的文件。
我一直在研究这个:
dir "C:\folder" /b/a |find /v /c "::"
但我不知道如何存储这个值并测试它是否为<或>。
也许有更好的方法来实现这个,但我现在想不出来。也许可以维护一个列表,如果新列表有一个新文件则运行批处理脚本,用新列表替换旧列表,我不太确定如何去做。
2个回答

5

答案1:

以下代码片段应该能让你朝着正确的方向前进。它使用 dir /b 来获取文件的原始列表,并使用 fc(文件比较)来检查每次执行检查时的差异。

你可以使用任务计划程序来每隔 x 分钟启动此批处理文件:

@echo off
if not exist c:\OldDir.txt echo. > c:\OldDir.txt
dir /b "d:\My Folder" > c:\NewDir.txt
set equal=no
fc c:\OldDir.txt c:\NewDir.txt | find /i "no differences" > nul && set
equal=yes
copy /y c:\Newdir.txt c:\OldDir.txt > nul
if %equal%==yes goto :eof
rem Your batch file lines go here

答案2:

我一直喜欢Ritchie Lawrence的批处理函数库,其中一个函数叫做GetDirStats

GetDirStats函数返回指定目录的文件数、子目录数和总大小。将来可能会有用。虽然它只在NT4/2000/XP/2003上进行了测试。
只需将compact/s更改为compact即可不扫描子文件夹。


我最终是通过计算文件数量然后进行比较得出了答案。因为你是唯一回答的人,所以我给了你答案 :) - Nick Sinas
@Nick 谢谢。我更新了我的答案,包括一个我非常喜欢的库函数的参考,这个库值得一看。 - Dean Taylor

1
:START
cls
set /a Old = 0
set /a New = 0
echo Counting files in folder..
for /f "tokens=*" %%P IN ('dir "C:\Users\..." /A /b') do (set /a Old += 1)
set Old
:: delay 60 sec
echo Delaying 60 seconds... (drop new file in)
ping 1.1.1.1 -n 1 -w 60000>nul
echo Checking for new files..
for /f "tokens=*" %%P IN ('dir "C:\Users\S..." /A /b') do (set /a New += 1)
set New
goto COMPARE

:COMPARE
echo Comparing number of files
if %New% gtr %Old% goto NEWF
goto OLDF

:NEWF
echo New File Detected.
echo.
goto START

:OLDF
echo No New Files.
PAUSE
echo Restarting
echo.
goto START

你可以直接将 dir /b 的输出通过 find /v /c "" 进行计数;这样会使代码变得更短。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接