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

Qwerty!! 28-12-2011 12:50 1824078

сделать бат файл, который архивирует файлы по их созданию по месяцам
 
Здравствуйте!

Мне нужно помощь, буду очень благодарен за любой совет.
не могу сделать бат файл, который архивирует файлы по их созданию по месяцам.
например в папке "Дос" лежит файлы, один из которых создан 30.11.2011 в 11 ночи, другой создан 01.12.2011. 1 ночи после архивации они должны лежать в двух архивах, например 1. 11.2011.rar,
2. 12.2011. Я делал так, но у меня по расписанию архивация запускается каждый день в 18:00 :
"C:\Program Files\WinRAR\winrar.exe" a -r -df -ag+YYYY-MM "ДОС" но оно сохраняет эти два файла в один в один файл.
Я просто никогда не делал бат файл, и не могу это сделать, прошу помочь!

Iska 28-12-2011 15:25 1824180

Цитата:

Цитата Qwerty!!
но оно сохраняет эти два файла в один в один файл. »

Разумеется:
Цитата:

Ключ -AG[формат] — добавить к имени архива текущие дату и время
Цитата:

Цитата Qwerty!!
прошу помочь! »

Объясните, как из дат создания «30.11.2011 в 11 ночи» и «01.12.2011. 1 ночи» Вы выводите «например 1. 11.2011.rar,
2. 12.2011».

RedX 29-12-2011 13:47 1824851

не пойму/
чем вас не устраивает такая форма&
Код:

"C:\Program Files\WinRAR\winrar.exe" a -r -df -ag+YYYY-MM-DD "ДОС"
или я просто не понял сути вопроса

Iska 29-12-2011 18:35 1825061

RedX, автору нужно помещать файлы в архивы, имеющие имена как-то связанные со временем создания этих самых файлов. Ждём разъяснений.

Dragokas 30-12-2011 00:10 1825288

Я понял, что файлы, созданные в январе должны находится в архиве 1.2012.rar, в феврале - 2.2012.rar ...

megaloman 30-12-2011 11:10 1825471

Как я понимаю, файлы должны архивироваться в архивы с именами по времени создания, а не по времени, когда был запущен WinRar. Вот вариант решения. Предполагаю, что формат даты в системе установлен как дд.мм.гггг, в противном случае надо подкорректировать строку
Set DataFile=!DataFile:~6,4!!DataFile:~3,2!
В результате работы создаются архивы файлов из папки E:\Delete в папке E:\Delete.rar под именами, соответствующими дате файла. Я предпочитаю имена вида ГГГГММ.rar -они логически хорошо сортируются по имени.
Код:

@Echo On
Rem Если Дата в системе в формате дд.мм.гггг

Set From=Z:\информационные технологии\данные\дос
Set To=Z:\информационные технологии\архив\дос

Set Rar="C:\Program Files\WinRar\WinRar.exe" a -r -df

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

Md "%To%" >nul 1>nul 2>nul

FOR /F "usebackq delims=" %%f IN (`Dir "%From%" /b /s /A:-D`) DO (
  Set DataFile=%%~tf
  Set DataFile=!DataFile:~6,4!!DataFile:~3,2!
  %Rar% "%To%\!DataFile!" "%%f"
)

Если Вам надо архивацию не по месяцам, как Вы написали в заголовке, а по дням, то в цикле подкорректируйте строку, чтобы она приняла вид:

Set DataFile=!DataFile:~6,4!!DataFile:~3,2!!DataFile:~0,2!

При этом будем иметь архивы вида ГГГГММДД.rar
Не важно, когда запускаем архивацию, важна дата последней модификации файла.
Все файлы с этой одинаковой датой попадут в один архив вне зависимости от того, когда этот файл попал в директорию или когда запустили архиватор. Можете через неделю запустить архиватор - фаилы разбредутся по нужным архивам.
Для сетевых папок отдельно не проверял, но, ИМХО, при указании сетевого пути папок батник будет работать, лишь бы хватало для этого пров доступа.

Qwerty!! 04-01-2012 13:38 1828160

RedX,
Дело в том что, он срабатывает так: если я задание поставил в 6 вечера, тогда он все файлы принятые после 6, будет вкладывать в другой архив. Мне нужно например программа приняла файлы в базу 10 штук, архив должен определить время их создания, после закинуть в архив или создать новый архив если его нет с текущей датой с именем. а данная команда так не делает, он тупо архивирует все в один архив, когда он будет запущен.
например в папке находится 15 файлов, 5 из которых был принят в 01.01.2012, а еще 5 были приняты в 02.01.2012, а еще 5 были приняты в 03. 01.2012, после запуска бат файла, он должен создать 3 архива с именем, например 01012012ТТ.rar, 02012012ТТТ.rar и 03012012ТТТ.rar.

Qwerty!! 04-01-2012 13:54 1828165

megaloman, megaloman, megaloman, megaloman, Diskretor,
Здравствуйте.
Я так и хочу, но при моей команде он в принципе архивирует, но те файлы которые были получены после архивации он включает его уже в другой архив.

Qwerty!! 05-01-2012 09:15 1828708

[b]megaloman[/
Здравствуйте!
Извините я не правильно отписался, он работает. А как сделать чтобы он сработал с сетевым диском? на клиентской машине подключен сетевой диск, и чтобы он запускался от туда, а не на сервере?

Qwerty!! 05-01-2012 12:44 1828829

megaloman

Просто я пробовал, он не может определить сетевой пусть. Я Вот здесь
Set From=E:\Delete
Set To=E:\Delete.rar

написал так
{chcp 1251 и с ним и без него пробЫвал.}
Set From=Z:\информационные технологии\данные\дос
Set To=Z:\информационные технологии\архив\дос.

не может определить сетевой пусть, и архивирует туда откуда запустил бат файл. А так на локалке работает отлично.

megaloman 05-01-2012 15:39 1828982

Qwerty!!, Дело не в сетевом пути, а в неточностях при написании батника. Исправил, пробуйте :cool:
Я пишу батники в 866 кодировке

Qwerty!! 06-01-2012 09:43 1829433

megaloman спасибо тебе!!
помогло, все отлично работает.
правда я тока добавил chcp1251, после это заработал.


Время: 18:52.

Время: 18:52.
© OSzone.net 2001-