我需要一个批处理文件来监控我的“下载”文件夹的添加内容,但只需要添加新内容。像这样:
: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 "::"
但我不知道如何存储这个值并将其测试为&lt;或&gt;
也许有更好的方法来做到这一点,但我现在想不到一个。也许维护一个列表,如果新列表有一个新文件运行批处理脚本,用旧列表替换旧列表,我真的不确定如何去做。
答案 0 :(得分:5)
以下代码段应该让您朝着正确的方向前进。它使用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
我一直很喜欢Ritchie Lawrence的library of batch functions。其中一个函数称为GetDirStats
。
GetDirStats
函数返回指定目录的文件数,子目录数和总大小。可能方便将来参考。虽然它只在NT4 / 2000 / XP / 2003上测试过
只需将compact/s
更改为compact
即可扫描子文件夹。
答案 1 :(得分: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