amel27
20-08-2009, 12:37
Требуется из папки сделать выборку файлов старше например 6 дней с даты создания »скрипт на базе поста #2 (http://forum.oszone.net/post-1158720-2.html) - формирует список TXT-файлов старше $OLD дней:
@Echo Off
:: Параметры скрипта, 0 < $OLD < 29!
:: $SRC - где ищем файлы
:: $OLD - какие файлы считаем старыми
:: $LST - имя файла для списка
:: $EXT - тип файла/расширение
Set $SRC=C:\
Set $EXT=TXT
Set $LST=C:\_\Files.LST
Set $OLD=25
:: Находим текущие день/месяц/год
For /F "Tokens=1" %%i In ('WMIC OS Get LocalDateTime^,Version^|Find "."') Do Set DateTime=%%i
Set $Y=%DateTime:~0,4%
If "%DateTime:~4,1%"=="0" (Set $M=%DateTime:~5,1%) Else (Set $M=%DateTime:~4,2%)
If "%DateTime:~6,1%"=="0" (Set $D=%DateTime:~7,1%) Else (Set $D=%DateTime:~6,2%)
:: Откатываем дату назад на $OLD дней
Call :GetOldDate %$OLD%
:: Выделяем из имени исходного каталога диск и путь
If Exist "%$SRC%" For /F "Delims=" %%i In ("%$SRC%") Do Set $DRV=%%~di& Set $PTH=%%~pni\
If Not "%$PTH%"=="\\" Set $PTH=%$PTH:\=\\%
:: Получаем список файлов старше $OLD дней
If Exist "%$LST%" DEL /F/Q "%$LST%"
For /F "UseBackQ Tokens=2 Delims==" %%i In (`WMIC Path CIM_DataFile Where^
"Drive='%$DRV%' And Extension='%$EXT%' And LastModified<'%DateTime%' And Path Like '%$PTH%%%'"^
Get Name /Value^|Find "="`
) Do For /F "Delims=" %%a In ('Echo %%i') Do Echo %%a >>%$LST%
:: Выход
EXIT
:GetOldDate
:: -----------------------------------
:: Расчет даты, предшествующей текущей
:: заданное количество дней (< 29)
:: -----------------------------------
Set /A $D -= %1
If %$D% GTR 0 GoTo GetOldDate_2
:: Месяц, год, дней в месяце
Set /A $M=%$M%+11-((%$M%+10)/12)*12
If %$M% EQU 12 Set /A $Y-=1
For /F "Tokens=%$M%" %%i In ("31 28 31 30 31 30 31 31 30 31 30 31") Do Set $X=%%i
If %$M% NEQ 2 GoTo GetOldDate_1
:: Февраль високосного года
Set /A $B1=%$Y%-(%$Y%/4)*4
Set /A $B2=%$Y%-(%$Y%/100)*100
Set /A $B3=%$Y%-(%$Y%/400)*400
If 0 EQU %$B1% If 0 NEQ %$B2% Set /A $X+=1
If 0 EQU %$B3% Set /A $X+=1
:: День месяца
:GetOldDate_1
Set /A $D=%$D%+%$X%-((%$D%+%$X%-1)/%$X%)*%$X%
:: Форматирование даты
:GetOldDate_2
Set $M=0%$M%&Set $D=0%$D%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
Set DateTime=%$Y%%$M%%$D%%DateTime:~8%
GoTo :EOF
P.S. Скрипт выбирает на основе даты последней модификации, если нужна все-таки дата создания, то нужно заменить "LastModified" на "InstallDate"
@Echo Off
:: Параметры скрипта, 0 < $OLD < 29!
:: $SRC - где ищем файлы
:: $OLD - какие файлы считаем старыми
:: $LST - имя файла для списка
:: $EXT - тип файла/расширение
Set $SRC=C:\
Set $EXT=TXT
Set $LST=C:\_\Files.LST
Set $OLD=25
:: Находим текущие день/месяц/год
For /F "Tokens=1" %%i In ('WMIC OS Get LocalDateTime^,Version^|Find "."') Do Set DateTime=%%i
Set $Y=%DateTime:~0,4%
If "%DateTime:~4,1%"=="0" (Set $M=%DateTime:~5,1%) Else (Set $M=%DateTime:~4,2%)
If "%DateTime:~6,1%"=="0" (Set $D=%DateTime:~7,1%) Else (Set $D=%DateTime:~6,2%)
:: Откатываем дату назад на $OLD дней
Call :GetOldDate %$OLD%
:: Выделяем из имени исходного каталога диск и путь
If Exist "%$SRC%" For /F "Delims=" %%i In ("%$SRC%") Do Set $DRV=%%~di& Set $PTH=%%~pni\
If Not "%$PTH%"=="\\" Set $PTH=%$PTH:\=\\%
:: Получаем список файлов старше $OLD дней
If Exist "%$LST%" DEL /F/Q "%$LST%"
For /F "UseBackQ Tokens=2 Delims==" %%i In (`WMIC Path CIM_DataFile Where^
"Drive='%$DRV%' And Extension='%$EXT%' And LastModified<'%DateTime%' And Path Like '%$PTH%%%'"^
Get Name /Value^|Find "="`
) Do For /F "Delims=" %%a In ('Echo %%i') Do Echo %%a >>%$LST%
:: Выход
EXIT
:GetOldDate
:: -----------------------------------
:: Расчет даты, предшествующей текущей
:: заданное количество дней (< 29)
:: -----------------------------------
Set /A $D -= %1
If %$D% GTR 0 GoTo GetOldDate_2
:: Месяц, год, дней в месяце
Set /A $M=%$M%+11-((%$M%+10)/12)*12
If %$M% EQU 12 Set /A $Y-=1
For /F "Tokens=%$M%" %%i In ("31 28 31 30 31 30 31 31 30 31 30 31") Do Set $X=%%i
If %$M% NEQ 2 GoTo GetOldDate_1
:: Февраль високосного года
Set /A $B1=%$Y%-(%$Y%/4)*4
Set /A $B2=%$Y%-(%$Y%/100)*100
Set /A $B3=%$Y%-(%$Y%/400)*400
If 0 EQU %$B1% If 0 NEQ %$B2% Set /A $X+=1
If 0 EQU %$B3% Set /A $X+=1
:: День месяца
:GetOldDate_1
Set /A $D=%$D%+%$X%-((%$D%+%$X%-1)/%$X%)*%$X%
:: Форматирование даты
:GetOldDate_2
Set $M=0%$M%&Set $D=0%$D%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
Set DateTime=%$Y%%$M%%$D%%DateTime:~8%
GoTo :EOF
P.S. Скрипт выбирает на основе даты последней модификации, если нужна все-таки дата создания, то нужно заменить "LastModified" на "InstallDate"