Компьютерный форум 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=188169)

LightZone 12-10-2010 19:32 1517336

Копирование файлов
 
Привет всем.Прошу помощи так как новичок в этом деле, мне нужно написать батник который будет копировать файлы из папки BASE, в папку с датой к примеру (BASECOPY\01.01.10) + к этому хотелось бы сразу из этой же папки (BASECOPY) удалялись папки с датами на 2 дня назад, тоесть если дата будет 22.01.10, чтобы этотже батник перед копированием базы удалял даты до 20.01.10.
Очень прошу помощи в этом вопросе и если можно каких то обьяснений.Заранее спасибо!!!

amel27 13-10-2010 05:45 1517630

для стандартного формата даты: "ДД.ММ.ГГГГ":

Код:

@echo off
SetLocal EnableDelayedExpansion

set SRC=BASE
set DST=BASECOPY

call :FromNow -2
xcopy /q/y "%SRC%\*" "%DST%\%DATE:~,5%.%DATE:~-2%\"
for /d %%i in (%DST%\*) do (
  set $i=%%~ni& set "$i=!$i:~-2!!$i:~3,2!!$i:~,2!"
  if !$i! lss %yymmdd% rd /s/q "%%i"
)
EXIT

:FromNow
 SetLocal
 Set yyyy=%DATE:~-4%& set /a mm=100%DATE:~3,2%%%100& set /a dd=100%DATE:~,2%%%100
 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
 Set /A J=J+2-12*L,I=100*(N-49)+I+L
 Set /A yyyy=I,mm=100+J,dd=100+K
 EndLocal& Set yymmdd=%yyyy:~-2%%mm:~-2%%dd:~-2%
Exit /B

FYI: CMD/BAT - [решено] Удаление старых архивов (пост #5)

LightZone 13-10-2010 11:08 1517758

Огромнейшее спасибо за ответ, если не трудно можете обьяснить что за что отвечает?

Ещё заметил что при копировании он копирует только файлы, но не копирует папки, можно это как-то исправить?Или указать ему чтобы он именно какую-то папку копировал, к примеру BASE/AA/?

amel27 13-10-2010 11:40 1517797

Цитата:

Цитата LightZone
можете обьяснить что за что отвечает? »

SRC - папка с данными;
DST - папка с копиями;
FromNow - расчет даты, отстоящей от текущей на заданное кол-во дней (переменная yymmdd);
XCOPY - собственно команда копирования;
FOR /D ... - цикл перебора архивных папок и сравнение с переменной yymmdd

Цитата:

Цитата LightZone
при копировании он копирует только файлы »

как было заказано

Цитата:

Цитата LightZone
можно это как-то исправить? »

добавить в XCOPY ключ /s

LightZone 13-10-2010 13:33 1517898

Понял спасибо, а вот если я хочу чтобы из папки к примеру BASE(10 файлов 10 папок в ней), чтобы именно копировалась папка BASE/AA к примеру, и больше нечего из подкаталога BASE?

Извиняюсь кажеться понял, set SRC=BASE/AA нужно наверно сделать так.


Время: 11:21.

Время: 11:21.
© OSzone.net 2001-