Войти

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


Qwerty!!
28-12-2011, 12:50
Здравствуйте!

Мне нужно помощь, буду очень благодарен за любой совет.
не могу сделать бат файл, который архивирует файлы по их созданию по месяцам.
например в папке "Дос" лежит файлы, один из которых создан 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
но оно сохраняет эти два файла в один в один файл. »
Разумеется:
Ключ -AG[формат] — добавить к имени архива текущие дату и время

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

RedX
29-12-2011, 13:47
не пойму/
чем вас не устраивает такая форма&
"C:\Program Files\WinRAR\winrar.exe" a -r -df -ag+YYYY-MM-DD "ДОС"

или я просто не понял сути вопроса

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

Dragokas
30-12-2011, 00:10
Я понял, что файлы, созданные в январе должны находится в архиве 1.2012.rar, в феврале - 2.2012.rar ...

megaloman
30-12-2011, 11:10
Как я понимаю, файлы должны архивироваться в архивы с именами по времени создания, а не по времени, когда был запущен 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
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
megaloman, megaloman, megaloman, megaloman, Diskretor,
Здравствуйте.
Я так и хочу, но при моей команде он в принципе архивирует, но те файлы которые были получены после архивации он включает его уже в другой архив.

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

Qwerty!!
05-01-2012, 12:44
megaloman

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

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

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

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

Qwerty!!
06-01-2012, 09:43
megaloman спасибо тебе!!
помогло, все отлично работает.
правда я тока добавил chcp1251, после это заработал.




© OSzone.net 2001-2012