Имя пользователя:
Пароль:
 

Название темы: [решено] 40000 дней назад
Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Вот еще несколько прямолинейный вариант решения.
Код: Выделить весь код
Echo off
rem CLS

rem -------------------
rem Предполагаю, что Дата в системе выдаётся в формате дд.мм.гггг чч:мм и т д (разделитель не важен) 
rem -------------------

Set NDays=40000
Set GdeNewDir=C:\Сказка про белого бычка\
Set Otkuda=D:\Update\
Set KudaLog=C:\Сказка про белого бычка\LogFile.txt

Set TimeTop1=12
Set TimeBot1=13

Set TimeTop2=14
Set TimeBot2=16

rem Выделяю из текущей даты день, месяц, год

Set Dt=%Date%

Set Day=%Dt:~0,2%
If %Day:~0,1%==0 Set Day=%Day:~1,1%

Set Mon=%Dt:~3,2%
If %Mon:~0,1%==0 Set Mon=%Mon:~1,1%

Set Yea=%Dt:~6,4%

rem Вычитаю из тек даты указ кол-во дней

Call :MinusDays

rem Создаю выходную директорию с пересчитанной датой в названии

Set OutDir=%GdeNewDir%Dir%Yea%%Mon%%Day%
MD "%OutDir%"

rem Копирую файлы изменённые в указанных временных промежутках 

Echo ----------------- %Date%  %Time% --------------- >>"%KudaLog%"
Set AllCopyFiles=0

for /R "%Otkuda%" %%i in (*.*) do Call :copy2time "%%~fi" "%%~ti" 

Echo ----------------- Всего скопировано файлов %AllCopyFiles% -------------->>"%KudaLog%" 

GoTo End


rem -------------------------------------------------------------
rem Процедура отнимает от даты заданное число дней
rem Дата содержится в трёх переменных Day Mon Yea
rem -------------------------------------------------------------

:MinusDays

Call :DelYear4
For /L %%D IN (1,1,%NDays%) Do Call :OldDt

If %Day% LSS 10 Set Day=0%Day%
If %Mon% LSS 10 Set Mon=0%Mon%

rem Echo %Yea% %Mon% %Day%
rem Pause 

GoTo End

rem -------------------------------------------------------------
rem Процедура отнимает от даты периоды в 4 года в отнимаемых днях
rem -------------------------------------------------------------

:DelYear4
REM 1461 - кол-во дней в 4 годах (с високосным)

If  %NDays% LSS 1461 GoTo End

Set /A iYea=%NDays%/1461
Set /A Yea=%Yea%-%iYea%*4
Set /A NDays=%NDays%-%iYea%*1461
GoTo End
rem -------------------------------------------------------------


rem ---------------------------------
rem Процедура отнимает от даты 1 день
rem ---------------------------------

:OldDt
Set /A Day=%Day%-1

If %Day% GTR 0 GoTo End

Set Day=31

Set /A Mon=%Mon%-1

If %Mon% GTR 0 GoTo BotDay

Set Mon=12
Set /A Yea=%Yea%-1

:BotDay
 
If Not %Mon%==2 GoTo Mon30
Set Day=28

Set iYea=%Yea%
Set /A iYea=%iYea%/4
Set /A iYea=%iYea%*4

If %Yea%==%iYea% Set Day=29
GoTo End 

:Mon30
If %Mon%==4 Set Day=30
If %Mon%==6 Set Day=30
If %Mon%==9 Set Day=30
If %Mon%==11 Set Day=30

GoTo End
rem ---------------------------------


rem ---------------------------------
rem Процедура копирует файлы изменённые в 2 заданных промежутках времени
rem ---------------------------------

:copy2time

Set TimeFile=%2

Set TimeFile=%TimeFile:~12,2%
If %TimeFile:~0,1%==0 Set TimeFile=%TimeFile:~1,1%

:Time1
If %TimeFile% LSS %TimeTop1% GoTo End
If %TimeFile% GEQ %TimeBot1% GoTo Time2
GoTo CopyFile

:Time2
If %TimeFile% LSS %TimeTop2% GoTo End
If %TimeFile% GEQ %TimeBot2% GoTo End
GoTo CopyFile

:CopyFile
Copy %1 "%OutDir%\" >Nul
Echo %1 %2 >>"%KudaLog%" 
Set /A AllCopyFiles=%AllCopyFiles%+1

GoTo End
rem ---------------------------------


:End
А насчёт VBS - Вам надо шашечки или ехать? Для автоматизации работы в Windows VBS удобнее JS (я начинал с JS, т к он более модный), так как почти 100% скриптов успешно отрабатывают в Excell, что даёт дополнительно очень мощные возможности

Последний раз редактировалось megaloman, 29-04-2010 в 20:07. Причина: Исправление ошибок после замечаний Amel27


Отправлено: 20:17, 28-04-2010 | #7

Название темы: [решено] 40000 дней назад