Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как сделать выборку по последней дате файлов??? (http://forum.oszone.net/showthread.php?t=182135)

Pshek 04-08-2010 17:35 1466804

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

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

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

NiOl 04-08-2010 18:07 1466827

В перемнной 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 1466828

Спасибо, попробую...

gora 04-08-2010 18:27 1466836

Код:

@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 1466850

А что означает переменная D ???

Цитата:

Цитата gora
@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 1467206

gora, Спасибо помогло...

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

gora 05-08-2010 10:44 1467233

Цитата:

Цитата Pshek
сразу удалялись файли, не за текущий месяц »

Код:

@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 1467249

gora, Спасибо огромное =)


Время: 12:46.

Время: 12:46.
© OSzone.net 2001-