![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как с помощью скрипта создать архив с динамичным названием учитывая нужные критерии |
|
|
CMD/BAT - [решено] Как с помощью скрипта создать архив с динамичным названием учитывая нужные критерии
|
Новый участник Сообщения: 41 |
Есть несколько файлов (количество файлов постоянно меняется), с разным названием и расширением (Например: Документ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
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:19, 20-01-2011 | #3 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать SendMessage, Спасибо за помощь!!!
Но скрипт должен быть "одноразовым", а не формировать сразу все названия архивов используя номер архива по порядку от 1 до 9. Нужно запустить один раз скрипт, сформировать название архива, скопировать в папки и завершить работу скрипта. Потом снова запустить скрипт(когда будет нужно), но нумерация не должна начинаться с 1, а должна начинаться учитывая последний номер созданного архива, то есть ели был файл после первого запуска С20аabc1.С01, соответственно при следующем запуске название будет С20аabc2.С01, а не С20аabc1.С01 как сейчас. Большое спасибо за помощь! |
Отправлено: 00:58, 21-01-2011 | #4 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать yaoleg2, не совсем ясна постановка - номер архива должен увеличиваться только при прочих равных символах в названии и расширении, или как? Например, если поменять раширение с С01 на С02, то счетчик опять должен начинаться с единицы?
Цитата yaoleg2:
Короче говоря: неясностей много. Но, при полной и ясной постановке задачи - решение вполне возможно. |
||
Отправлено: 04:24, 21-01-2011 | #5 |
Новый участник Сообщения: 41
|
Профиль | Отправить 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
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Спасибо, все работает на УРА!!!
![]() ![]() Только еще один нюанс. При вводе расширения архива нужно вводить только три символа английского алфавита: одну букву и две цифры. Можно сделать контроль ввода этих символов??? ![]() Большущее СПАСИБО!!! ![]() |
Отправлено: 20:17, 24-01-2011 | #8 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать попахивает госструктурой
|
Отправлено: 11:21, 25-01-2011 | #9 |
Старожил Сообщения: 175
|
Профиль | Отправить 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 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Установка - [решено] Обновления от 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 |
|