![]() |
Как с помощью скрипта создать архив с динамичным названием учитывая нужные критерии
Есть несколько файлов (количество файлов постоянно меняется), с разным названием и расширением (Например: Документ1.doc, Новый документ.xls, *.dbf и т.д. и т.п.). Нужно эти файлы заархивировать с помощью Winrar .
Но основная проблема не в самой архивации, а в создании нужного имени архива. Например, нужно заархивировать файлы в rar-архив с названием этого архива P20aabc1.P01, где: – Р и Р01…Р99(причем вместо Р может быть любая буква латинского/английского алфавита которая выбирается пользователем). При формировании названия архива, нужно чтобы скрипт «спрашивал», что писать в расширении архива Р01 или Р02…Р99 и соответственно если пользователь ответит С01, то название будет типа С20аabc1.С01; – 20 - сегодняшнее число месяца; – а - буквенный «номер» месяца (a-январь;b-февраль;c-март; d-апрель; e-май; f-июнь; g-июль; h-август; i-сентябрь; j-октябрь; k-ноябрь; l-декабрь;); – abc- три буквы латинского алфавита которые есть постоянные(статичные) в отличие от букв обозначающих месяц создание архива они неизменны в отличии от остальных символов; – 1 - это номер архива по порядку от 1 до 9(после девятого архива номер снова должен начинаться с 1, прежде всего это связано с тем, что название созданного архива должно соответствовать 8 символом название и 3символа расширение архива). Вероятность, что название архива в один день будет одинакова – ничтожна, ибо символы Р и Р01 меняются в зависимости от выбора пользователя(можно выбрать А и А01…А99). Между первой буквой названия архива и расширением (Р и Р01) есть взаимосвязь, то есть в названии архива не должно быть А20aabc1.P01 или P20aabc1.А01 – должно быть P20aabc1.P01 или А20aabc1.А01. 1. затем скопировать в архивную директорию C:\YYYY\MM\DD\ (Например сегодня папка архива будет – С:\2011\01\20\); 2. потом этот файл скопировать в другую папку D:\mail\out. Возможно ли процесс создания названия архивного файла написать с помощь скрипта или тут поможет только язык программирования? |
Что-то вроде такого?
Код:
@echo off |
Забыл совсем про копирование. :)
Код:
xcopy /i /y /q "ArchivePath" "c:\%date:~6,4%\%date:~3,2%\%date:~0,2%\" |
SendMessage, Спасибо за помощь!!!
Но скрипт должен быть "одноразовым", а не формировать сразу все названия архивов используя номер архива по порядку от 1 до 9. Нужно запустить один раз скрипт, сформировать название архива, скопировать в папки и завершить работу скрипта. Потом снова запустить скрипт(когда будет нужно), но нумерация не должна начинаться с 1, а должна начинаться учитывая последний номер созданного архива, то есть ели был файл после первого запуска С20аabc1.С01, соответственно при следующем запуске название будет С20аabc2.С01, а не С20аabc1.С01 как сейчас. Большое спасибо за помощь! |
yaoleg2, не совсем ясна постановка - номер архива должен увеличиваться только при прочих равных символах в названии и расширении, или как? Например, если поменять раширение с С01 на С02, то счетчик опять должен начинаться с единицы?
Цитата:
Короче говоря: неясностей много. Но, при полной и ясной постановке задачи - решение вполне возможно. |
Нумерация должна быть "сквозной", независимо от расширения архива.
Я думаю лучше в папке со скриптом создать текстовый файл в котором записывать какая цифра была последней, и при создании нового названия архива считывать значение из файла увеличивая на единицу. Но на следующий день - число должно быть 1 и т.д. Даже если в текстовом файле стоит 3(или любое другое число), с нового дня архив должен начинаться с единицы! Нумерации после 9 должна снова идти по "кругу" 1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9, ибо вероятность создания двух архивов с одинаковыми названиями ничтожна из-за того что расширение архива в основном разное. |
Код:
@echo off |
Спасибо, все работает на УРА!!! :ok: :laiel:
Только еще один нюанс. При вводе расширения архива нужно вводить только три символа английского алфавита: одну букву и две цифры. Можно сделать контроль ввода этих символов???:dont-know Большущее СПАСИБО!!! :yahoo: |
попахивает госструктурой
|
Цитата:
Код:
echo **************************** |
Цитата:
Спасибо за помощь!!! |
Цитата:
Цитата:
|
Iska, такая ситуация бывает редко, но когда бывает перезаписываются некоторые архивы, что не есть хорошо :(
|
yaoleg2, знаете выход из этой ситуации? Достаточно просто добавлять к имени архива дату и время его создания. Без изобретения всяких игр с нумерацией цифрами, а затем латинским алфавитом.
|
Iska, все было-бы проще если б не правила создания архива, которым эти архивы и должны соответствовать иначе мы будем наказаны :yes:
Или может быть, можно как-нибудь проверять архивную директорию на наличие файла с таким названием и если есть такое название архива менять цифру 1 на 2 или 3 ...9 ? |
А какие проблемы добавить if exist ?
Например: Код:
if not "%n:~1,2%"=="%day%" (set i=1) else (set /a i=%n:~0,1%+1) Да и с заменой номера на букву проблем нет: Код:
Setlocal EnableDelayedExpansion |
Время: 01:22. |
Время: 01:22.
© OSzone.net 2001-