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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как с помощью скрипта создать архив с динамичным названием учитывая нужные критерии

Ответить
Настройки темы
CMD/BAT - [решено] Как с помощью скрипта создать архив с динамичным названием учитывая нужные критерии

Новый участник


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

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


Есть несколько файлов (количество файлов постоянно меняется), с разным названием и расширением (Например: Документ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.

Возможно ли процесс создания названия архивного файла написать с помощь скрипта или тут поможет только язык программирования?

Отправлено: 14:18, 20-01-2011

 

Старожил


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

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


Что-то вроде такого?
Код: Выделить весь код
@echo off

:ArchiveName
set /a i+=1
if %i% gtr 9 set i=1
echo.
echo ****************************
echo Формирование названия архива
echo ****************************
echo.
set /p ext=Выберите расширение архива (например, С01):
call:ReplaceMonthName %date:~3,2%
echo.
echo ArchiveName : %ext:~0,1%%date:~0,2%%month%abc%i%.%ext%
echo.
::Далее идут команды для архивирования. Предполагается, что Вы их знаете. 
set /p next=Продолжить? (y):
if "%next%"=="y" goto ArchiveName else goto:eof

:ReplaceMonthName
set month=%1
set month=%month:01=a%
set month=%month:02=b%
set month=%month:03=c%
set month=%month:04=d%
set month=%month:05=e%
set month=%month:06=f%
set month=%month:07=g%
set month=%month:08=h%
set month=%month:09=i%
set month=%month:10=j%
set month=%month:11=k%
set month=%month:12=l%
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:58, 20-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


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

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


Забыл совсем про копирование.
Код: Выделить весь код
xcopy /i /y /q "ArchivePath" "c:\%date:~6,4%\%date:~3,2%\%date:~0,2%\"
xcopy /i /y /q "ArchivePath" "d:\mail\out\"
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:19, 20-01-2011 | #3


Новый участник


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

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


SendMessage, Спасибо за помощь!!!

Но скрипт должен быть "одноразовым", а не формировать сразу все названия архивов используя номер архива по порядку от 1 до 9. Нужно запустить один раз скрипт, сформировать название архива, скопировать в папки и завершить работу скрипта. Потом снова запустить скрипт(когда будет нужно), но нумерация не должна начинаться с 1, а должна начинаться учитывая последний номер созданного архива, то есть ели был файл после первого запуска С20аabc1.С01, соответственно при следующем запуске название будет С20аabc2.С01, а не С20аabc1.С01 как сейчас.

Большое спасибо за помощь!

Отправлено: 00:58, 21-01-2011 | #4


Старожил


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

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


yaoleg2, не совсем ясна постановка - номер архива должен увеличиваться только при прочих равных символах в названии и расширении, или как? Например, если поменять раширение с С01 на С02, то счетчик опять должен начинаться с единицы?
Цитата yaoleg2:
нумерация не должна начинаться с 1, а должна начинаться учитывая последний номер созданного архива, то есть ели был файл после первого запуска С20аabc1.С01, соответственно при следующем запуске название будет С20аabc2.С01, а не С20аabc1.С01 как сейчас. »
Нужно сканировать папку (только какую, где все эти архивы хранятся, если не считать того, что они скопированы в соответствующие папки?) на соответствие имени, выбирать среди найденных наибольший по нумерации и увеличивать индекс. А если уже предел до 9 достигнут, начнет затирать старые или автоматически должен увеличиваться номер архива в расширении?
Короче говоря: неясностей много. Но, при полной и ясной постановке задачи - решение вполне возможно.

Отправлено: 04:24, 21-01-2011 | #5


Новый участник


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

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


Нумерация должна быть "сквозной", независимо от расширения архива.
Я думаю лучше в папке со скриптом создать текстовый файл в котором записывать какая цифра была последней, и при создании нового названия архива считывать значение из файла увеличивая на единицу. Но на следующий день - число должно быть 1 и т.д. Даже если в текстовом файле стоит 3(или любое другое число), с нового дня архив должен начинаться с единицы!
Нумерации после 9 должна снова идти по "кругу" 1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9, ибо вероятность создания двух архивов с одинаковыми названиями ничтожна из-за того что расширение архива в основном разное.

Последний раз редактировалось yaoleg2, 21-01-2011 в 09:50.


Отправлено: 09:45, 21-01-2011 | #6


Старожил


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

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


Код: Выделить весь код
@echo off

if exist index.txt (set /p n=<index.txt) else (set n=0%date:~0,2%)
set "day=%date:~0,2%"
if not "%n:~1,2%"=="%day%" (set i=1) else (set /a i=%n:~0,1%+1)
if %i% gtr 9 set i=1
echo.
echo ****************************
echo Формирование названия архива
echo ****************************
echo.
set /p ext=Выберите расширение архива (например, С01):
call:ReplaceMonthName %date:~3,2%
echo.
echo ArchiveName : %ext:~0,1%%day%%month%abc%i%.%ext%
echo.
::Далее идут команды для архивирования. Предполагается, что Вы их знаете.
xcopy /i /y /q "ArchivePath" "c:\%date:~6,4%\%date:~3,2%\%date:~0,2%\"
xcopy /i /y /q "ArchivePath" "d:\mail\out\"
echo.%i%%day%>index.txt
goto:eof

:ReplaceMonthName
set month=%1
set month=%month:01=a%
set month=%month:02=b%
set month=%month:03=c%
set month=%month:04=d%
set month=%month:05=e%
set month=%month:06=f%
set month=%month:07=g%
set month=%month:08=h%
set month=%month:09=i%
set month=%month:10=j%
set month=%month:11=k%
set month=%month:12=l%
exit /b

Последний раз редактировалось SendMessage, 21-01-2011 в 19:23.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:11, 21-01-2011 | #7


Новый участник


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

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


Спасибо, все работает на УРА!!!

Только еще один нюанс. При вводе расширения архива нужно вводить только три символа английского алфавита: одну букву и две цифры. Можно сделать контроль ввода этих символов???

Большущее СПАСИБО!!!

Отправлено: 20:17, 24-01-2011 | #8


Ветеран


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

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


попахивает госструктурой

Отправлено: 11:21, 25-01-2011 | #9


Старожил


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

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


Цитата yaoleg2:
Только еще один нюанс. При вводе расширения архива нужно вводить только три символа английского алфавита: одну букву и две цифры. Можно сделать контроль ввода этих символов??? »
Поменяй код вот в этом месте (не хочу опять портянку постить):
Код: Выделить весь код
echo ****************************
echo Формирование названия архива
echo ****************************
:ArchiveName
echo.
set /p ext=Выберите расширение архива (например, С01):
echo.%ext%|findstr /i "\<[a-z][0-9][0-9]\>">nul||(echo Расширение выбрано неверно.&goto ArchiveName)
call:ReplaceMonthName %date:~3,2%
Красным выделено новое.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:25, 25-01-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как с помощью скрипта создать архив с динамичным названием учитывая нужные критерии

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - [решено] Обновления от Microsoft: нужные, не нужные. Польза или вред. flev45 Microsoft Windows 7 18 29-09-2010 13:05
Разное - [HELP] Как создать SFX-CAB архив? WindLiS Наборы обновлений для Windows XP/2003/Windows 7 8 06-03-2010 13:02
[решено] Как с помощью CMD(BAT) запустить запароленный sfx архив! ofcoss Автоматическая установка приложений 7 10-07-2009 00:41
[решено] Как создать учетные записи с помощью скрипта? fm72 Microsoft Windows NT/2000/2003 4 29-09-2005 14:01
Как создать файл с помощью CGI скрипта. lehha Программирование и базы данных 1 20-11-2003 09:48




 
Переход