пакетный файл для отслеживания дополнений в папке загрузки - PullRequest
3 голосов
/ 20 ноября 2010

Мне нужен командный файл, который отслеживает добавления в папку «Загрузки», но только новые добавления. Примерно так:

: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 голосов
/ 20 ноября 2010

Ответ 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, чтобы не сканировать подпапки.

1 голос
/ 22 ноября 2010
: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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...