Войти

Показать полную графическую версию : Выборка по дате и копирование файлов


TiroEL
10-08-2015, 10:37
Здравствуйте. Очень прошу помочь с написанием bat-файла)
Суть такая. Есть папка, в которой хранятся бэкапы с сервера. В день появляется по 1-2 новых файла.
Необходимо написать bat файл, который копировал бы файлы за 5 последних дней из этой папки в указанную. При этом в идеале, удаляя файлы старше чем 5-ти дневной давности. Заранее спасибо!

alpap
16-08-2015, 20:35
TiroEL, Как-то делал похожее, поменяете на 5 дней в строке 15, удаление надо доработать и скачать утилиту nircmd и кинуть в system32 @echo off
setlocal enabledelayedexpansion
set "qw=%Userprofile%\Desktop\Test"
rem Для изменения у всех файлов даты "модификации" "обращения" [на текущую]
"nircmd" setfiletime "%qw%\*" "" now now
rem Убираем лидирующий "0" из даты, если есть
for /f "tokens=* delims=0" %%d in ("%date%") do (
set onosdate=%%d
rem Модифицируем дату к виду: "текущая дата-3(дня)"
for /f "tokens=1-3 delims=.: " %%a in ("!onosdate!") do (
rem У кого английская поменять на %%c%%b%%a
set sdate=%%a%%b%%c
rem У кого английская %%c%%b
set dnoa=%%b%%c
set range=3
set /a newa=%%a-!range!
rem У кого английская !dnoa!!newa!
set newsdate=!newa!!dnoa!))
rem Выделяем "дату создания" "имя" и "расширение" файлов (очень важна сортировка по дате и времени, порядок не важен)
for /f "tokens=1-8 delims=.: " %%i in ('dir/a-d/o-d/tc "%qw%"^| findstr/rc:"^[^ ]"') do (
rem У кого английская %%k%%j%%i
set mydate=%%i%%j%%k
rem Убираем лидирующий "0" из даты, если есть
for /f "tokens=* delims=0" %%q in ("!mydate!") do (
set onomydate=%%q
set "namemydate=%%o.%%p%%q"
rem Сравниваем "имя" "расширение" "заданная дата" = "имя" "расширение" "дата создания" файла
if "%%o.%%p%newsdate%"=="!namemydate!" (
rem Дальше вольны делать с файлами, что захотим, например:
copy "%qw%\%%o.%%p" "%Userprofile%\Desktop\Folder\")))
exit.

Опиум
17-08-2015, 09:27
юзать robocopy




© OSzone.net 2001-2012