PDA

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


Pshek
04-08-2010, 17:35
В определённой папке (назовём её "archive") каждых пол часа создаются архивы БД, в среднем 25 файлов в день... За неделю - месяц их там собирается целая куча...

Какую команду написать в bat-нике, чтобы он копировал файлы только последней даты? (bat-ник запускается по надобности, а не регулярно...).

Заранее спасибо...

NiOl
04-08-2010, 18:07
В перемнной Dst указываете путь, куда копировать файлы, скрипт в папку с копируемыми файлами лучше не класть, но запускать именно из копируемой папки.

@echo off
SetLocal EnableExtensions

set Dst=C:\TEMP\

set D=.
for /f "tokens=* delims=" %%F in ('dir /a-d /b /o-d') do call :Check "%%F"
goto End

:Check
set Cur=%~t1
set Cur=%Cur:~0,10%
if %D%==. set D=%Cur%
if not %D%==%Cur% (Echo Done & exit)
set stat=Done
copy %1 %Dst% 2>nul 1>nul
if errorlevel 1 set stat=Failed
echo %Stat%: %D% %~1 >>%~dpn0.log
exit /b

:End

Pshek
04-08-2010, 18:09
Спасибо, попробую...

gora
04-08-2010, 18:27
@Echo Off
SetLocal enabledelayedexpansion
Rem Здесь указана исходная папка
Set fl=c:\archive
Rem Здесь указана папка приемник
Set Out=c:\lastday

Set lday=00000000
For %%i In ("%fl%\*") Do (
Set fdat=%%~ti
Set fdat=!fdat:~6,4!!fdat:~3,2!!fdat:~0,2!
If !fdat! GTR !lday! Set lday=!fdat!
)
For %%i In ("%fl%\*") Do (
Set fdat=%%~ti
Set fdat=!fdat:~6,4!!fdat:~3,2!!fdat:~0,2!
If !fdat!==!lday! Copy /Y "%%i" "%Out%\%%~nxi"
)
Exit

Pshek
04-08-2010, 18:58
А что означает переменная D ???

@Echo Off
SetLocal enabledelayedexpansion
Rem Здесь указана исходная папка
Set fl=c:\archive
Rem Здесь указана папка приемник
Set Out=c:\lastday
Set lday=00000000
For %%i In ("%fl%\*") Do (
Set fdat=%%~ti
Set fdat=!fdat:~6,4!!fdat:~3,2!!fdat:~0,2!
If !fdat! GTR !lday! Set lday=!fdat!
)
For %%i In ("%fl%\*") Do (
Set fdat=%%~ti
Set fdat=!fdat:~6,4!!fdat:~3,2!!fdat:~0,2!
If !fdat!==!lday! Copy /Y "%%i" "%Out%\%%~nxi"
)
Exit »


Пробую...

Pshek
05-08-2010, 10:15
gora, Спасибо помогло...

А можно ещё сделать дополнение, чтобы сразу удалялись файли, не за текущий месяц???

gora
05-08-2010, 10:44
сразу удалялись файли, не за текущий месяц »
@Echo Off
SetLocal enabledelayedexpansion
Rem Здесь указана исходная папка
Set fl=c:\archive
Rem Здесь указана папка приемник
Set Out=c:\lastday

Set tMonth=%Date:~6,4%%Date:~3,2%
Set lday=00000000
For %%i In ("%fl%\*") Do (
Set fdat=%%~ti
Set fMonth=!fdat:~6,4!!fdat:~3,2!
Set fdat=!fdat:~6,4!!fdat:~3,2!!fdat:~0,2!
If Not %tMonth%==!fMonth! Del /F/Q "%%i"
If !fdat! GTR !lday! Set lday=!fdat!
)
For %%i In ("%fl%\*") Do (
Set fdat=%%~ti
Set fdat=!fdat:~6,4!!fdat:~3,2!!fdat:~0,2!
If !fdat!==!lday! Copy /Y "%%i" "%Out%\%%~nxi"
)
Exit

Pshek
05-08-2010, 11:06
gora, Спасибо огромное =)




© OSzone.net 2001-2012