воскресенье, 27 мая 2012 г.

CMD скрипт для сбора новых файлов созданных за предыдущий день.

Давным давно решал я задачу которая требовала сбора появившихся за день файлов с определенным расширением. Вот каким образом я эту задачу решил (использовав материалы огромной сети интернет), использовав только встроенные средства Windows, среди которых замечательная утилита robocopy.

Bat-файл
-----------------------------------------------------------------------------------------------------

@echo off

IF %DATE:~0,1%==0 (
  SET /A T_DAY=%DATE:~1,1%) else (
  SET /A T_DAY=%DATE:~0,2%)

IF %DATE:~3,1%==0 (
 SET /A T_MONTH=%DATE:~4,1%) else (
  SET /A T_MONTH=%DATE:~3,2%)
  SET /A T_YEAR=%DATE:~6,4%

:: ТУТ МЕНЯЕМ ЧИСЛО, КАК НАЗЫВАТЬ ПАПКУ В КОТОРУЮ БУДУТ СВАЛИВАТЬСЯ ::ОТОБРАННЫЕ ФАЙЛЫ
 SET  /A T_DAY=%T_DAY%-1

:: формируем правильное название папки исходя из полученного от команды date
IF %T_DAY% LEQ 0 SET /A T_MONTH=%T_MONTH%-1
IF %T_MONTH%== 0 SET /A T_YEAR=%T_YEAR%-1
IF %T_MONTH%== 0 SET /A T_MONTH=12
if %T_MONTH%==1 Set /A DIM=31
if %T_MONTH%==2 Set /A DIM=29
if %T_MONTH%==3 Set /A DIM=31
if %T_MONTH%==4 Set /A DIM=30
if %T_MONTH%==5 Set /A DIM=31
if %T_MONTH%==6 Set /A DIM=30
if %T_MONTH%==7 Set /A DIM=31
if %T_MONTH%==8 Set /A DIM=31
if %T_MONTH%==9 Set /A DIM=30
if %T_MONTH%==10 Set /A DIM=31
if %T_MONTH%==11 Set /A DIM=30
if %T_MONTH%==12 Set /A DIM=31
IF %T_DAY% LEQ 0 SET /A T_DAY=%T_DAY%+%DIM%

IF %T_DAY% LSS 10 SET T_DAY=0%T_DAY%
IF %T_MONTH% LSS 10 SET T_MONTH=0%T_MONTH%

set YYYYMMDD=%T_YEAR%%T_MONTH%%T_DAY%

md "\\PC30\d\Sbor\%YYYYMMDD%"

robocopy \\Server01\e\3d "\\R30\d\Sbor\%YYYYMMDD%" *.avi *.mov /S /MAXAGE:1 /R:3

:: MAXAGE:1 означает что файлы брать не старше 1 суток
:: ключ R я ограничил 3, иначе по умолчанию значение попыток скопировать файл равно ::миллиону, а мне такое не надо

Комментариев нет: