我需要一个batch file来监视添加到我的下载文件夹,但只有新的补充。 像这样的东西:
: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 "::"
但我不知道如何存储这个值,并testing它为<或>。
也许有更好的方法来做到这一点,但我现在无法想象。 也许维护一个列表,如果新列表有一个新文件运行批处理脚本,用新列表replace旧列表,我真的不知道如何去做这件事。
以下片段应该让你朝着正确的方向前进。 它使用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 /yc:\Newdir.txt c:\OldDir.txt > nul if %equal%==yes goto :eof rem Your batch file lines go here
我一直喜欢Ritchie Lawrence 的批处理函数库 。 其中一个函数称为GetDirStats
。
GetDirStats
函数返回指定目录的文件数,子目录数和总大小。 可能会方便将来参考。 虽然它只在NT4 / 2000 / XP / 2003上测试过。
只需将compact/s
更改为compact
可以不扫描子文件夹。
: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