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

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

Ответить
Настройки темы
CMD/BAT - [решено] Батник для двойной сортировки и переименования

Аватара для Nun-Nun

Ветеран


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


Конфигурация

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


Нужен батник для следующей задачи: есть, например, куча разных хотфиксов для винды, причём каждый из хотфиксов расположен в отдельной папке, имеющей название, присвоенное по номеру и дате хотфикса. Нужно выполнить сортировку этих папок по дате и номеру с одновременным переименовыванием папок путём добавления в их название порядкового номера, затем перенести сами файлы хотфиксов из отдельных папок в одну общую папку, переименовывая при этом названия файлов путём добавления порядкового номера как у исходной папки. При этом сортировка папок хотфиксов должна выполняться в первую очередь по дате и затем по номеру хотфикса. Чтобы было понятнее поясню наглядно. Например, есть 5 папок с хотфиксами (номера взяты произвольно!): KB976453_(12-07-2009), KB2356788_(08-05-2010), KB849762_(03-02-2011), KB2345788_(18-05-2010), KB2545788_(22-05-2011). В результате работы батника должен получиться следующий перечень папок:

001_KB976453_(12-07-2009)
002_KB2356788_(08-05-2010)
003_KB2345788_(18-05-2010)
004_KB849762_(03-02-2011)
005_KB2545788_(22-05-2011)

После этого перечень файлов хотфиксов в общей папке должен получиться таким:

001_WindowsXP-KB976453-x86-RUS.exe
002_WindowsXP-KB2356788-x86-RUS.exe
003_WindowsXP-KB2345788-x86-RUS.exe
004_WindowsXP-KB849762-x86-RUS.exe
005_WindowsXP-KB2545788-x86-RUS.exe

Отправлено: 13:55, 17-01-2012

 

Аватара для gora

Ушёл из жизни


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

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


Nun-Nun, о постановке задачи:
1 Скобки являются спец. символом в CMD и использование их в именах усложняет обработку таких имен. Лучше от них (скобок в именах) сразу отказаться.
2 Даты проще обрабатывать в формате YYYYMMDD, дабы потом не вырезать лишние тире и не переворачивать даты, переводя их в формат удобный для сравнения в CMD.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:09, 17-01-2012 | #2



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

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


Аватара для Nun-Nun

Ветеран


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

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


gora,

Пусть будет и с учётом Ваших замечаний, правда мне ооочень долго придётся переименовывать те папки, что уже есть (а их набралось уже несколько сотен), но это не самое страшное, главное увидеть, как такая задача решается.

-------
Свобода не означает вседозволенность.


Отправлено: 14:20, 17-01-2012 | #3


Аватара для gora

Ушёл из жизни


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

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


Цитата Nun-Nun:
переименовыванием папок путём добавления в их название порядкового номера, затем перенести сами файлы хотфиксов из отдельных папок в одну общую папку »
1 Зачем переименовывать исходные папки? Повторно запустить батник уже не получится, ибо имена папок будут иметь уже другой формат. Если в дальнейшем будут добавляться папки с новыми фиксами, а устаревшие фиксы со своими папками будут удаляться, то порядковые номера всех папок нужно будет снова править и уже вручную, т.к., часть из них добавится, а часть пропадет и в нумерации останутся "дыры".
2 Команды "перенести" в CMD нет. Либо "скопировать", либо "переместить". Последнее опять чревато невозможностью повторного запуска батника.
3 Если "переместить", то в результате у Вас останется одна папка со всеми фиксами у которых будут новые имена и куча пустых папок с новыми именами. Зачем нужны эти пустые переименованные папки?
4 Скрипт предназначен для однократного использования? Тогда лучше отказаться от этой идеи совсем. ИМХО.

Последний раз редактировалось gora, 17-01-2012 в 16:18.


Отправлено: 15:34, 17-01-2012 | #4


Аватара для Nun-Nun

Ветеран


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

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


Цитата gora:
1 Зачем переименовывать исходные папки? »
Прошу прощения, не совсем точно выразился: разумеется, речь шла не об исходниках папок с хотфиксами, а об их копиях, взятых для поставленной задачи, сами же исходники хранятся в архиве и никаких экспериментов я с ними не провожу. Работа по переименованию папок нужна не потому, что больше нечего делать, а для работы другого скрипта, просто делать это каждый раз для него вручную слишком долго. Но пусть это Вас не беспокоит, даже если будут пустые, но отсортированные и пронумерованные нужным образом папки мне этого достаточно.
Цитата:
Повторно запустить батник уже не получится, ибо имена папок будут иметь уже другой формат.
Для повторной работы ему будет предоставлен новый нормальный неправленный набор папок с хотфиксами.
Цитата gora:
Если в дальнейшем будут добавляться папки с новыми фиксами, а устаревшие фиксы со своими папками будут удаляться, то порядковые номера всех папок нужно будет снова править и уже вручную »
Добавляться и удаляться будут, но вручную и не в комплект обработанных батником, а в исходный архив. Батнику, как я уже говорил, будет для обработки предоставляться (из архива) необработанный комплект папок с хотфиксами, от него требуется только их подготовить в соответствии с поставленной задачей.
Цитата gora:
2 Команды "перенести" в CMD а нет. Либо "скопировать", либо "переместить".»
Моя оплошность, не точно выразился, разумеется имелось в виду "скопировать". Но в принципе, пустые обработанные папки для повторной работы батника использоваться не будут, т.к. они - только источнок информации (дата и номер хотфикса) для него.
Цитата gora:
Скрипт предназначен для однократного использования?»
Нет не для однократного! Я ведь потому и держу отдельный архив с хотфиксами! В архиве у меня находятся папки без сортировки, чтобы без заморочек можно было туда добавлять новые и удалять устаревшие.

-------
Свобода не означает вседозволенность.


Последний раз редактировалось Nun-Nun, 17-01-2012 в 18:20.


Отправлено: 18:07, 17-01-2012 | #5


Аватара для gora

Ушёл из жизни


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

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


Для папок формата:
KB849762_20110203
KB849768_20110203
KB976453_20090712
KB2345788_20100518
KB2356788_20100508
KB2545788_20110522
попробуйте так:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Папка с исходными папками фиксов
Set InFld=e:\Temp 1\1\1
:: Папка в которой будут созданы пустые папки со сквозной нумерацией (не понял зачем они, но пусть будет)
Set OutFld=e:\Temp 1\1\2
:: Папка в которую копируются переименованные файлы фиксов
Set allfix=e:\Temp 1\1\2\AllFix

For /F "UseBackQ Delims=" %%i In (`Dir "%InFld%" /B /AD /ON 2^>Nul`) Do (
	Set ti=%%i
	Set dat=!ti:~-8!
	Set kb=!ti:~0,-9!
	If "!ti:~8,1!"=="_" Set kb=!kb:~0,2!0!kb:~2!
	Set $!dat!!kb!=1
)
Set cnt=0
For /F %%i In ('Set $') Do (
	Set /A cnt +=1
	Set cnt0=00!cnt!
	Set ti=%%i
	Set kb=!ti:~9,9!
	If "!kb:~2,1!"=="0" Set kb=!kb:~0,2!!kb:~3!
	MD "%OutFld%\!cnt0:~-3!_!kb!_!ti:~1,8!" 2>Nul
	For %%f In ("%InFld%\!kb!_!ti:~1,8!\*.*") Do (
		Copy /Y "%InFld%\!kb!_!ti:~1,8!\%%~nxf" "%allfix%\!cnt0:~-3!_%%~nxf" >Nul
		Echo RD /S /Q "%InFld%\!kb!_!ti:~1,8!"	
	)
)

Последний раз редактировалось gora, 17-01-2012 в 19:27. Причина: исправил переменную

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

Отправлено: 18:28, 17-01-2012 | #6


Аватара для Nun-Nun

Ветеран


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

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


gora,

Взял произвольный набор хотфиксов:

KB2296199_20101213
KB2360131_20101012
KB2387149_20101011
KB2393802_20110207
KB2412687_20110411
KB2416400_20101213
KB2419632_20110110
KB2423089_20101213
KB2436673_20101213
KB2440591_20101213
KB2443105_20101213
KB2467659_20101210
KB2476687_20110207
KB2478960_20110207
KB2478971_20110207
KB2479628_20110207
KB2479943_20110307
KB2483185_20110207
KB2483614_20110307
KB2485376_20110207
KB2485663_20110411
KB2503658_20110411
KB2506212_20110411
KB2506223_20110411
KB2507618_20110411
KB2508272_20110411
KB2508429_20110411
KB2524375_20110322
KB931125_20101025

Вот что получилось с пустыми папками :

001_KB2387149_20101011
001_KB2440591_20101213
001_KB2483185_20110207
001_KB2506212_20110411
002_KB2360131_20101012
002_KB2443105_20101213
002_KB2485376_20110207
002_KB2506223_20110411
003_KB2419632_20110110
003_KB2479943_20110307
003_KB2507618_20110411
003_KB931125_20101025
004_KB2393802_20110207
004_KB2467659_20101210
004_KB2483614_20110307
004_KB2508272_20110411
005_KB2296199_20101213
005_KB2476687_20110207
005_KB2508429_20110411
005_KB2524375_20110322
006_KB2412687_20110411
006_KB2416400_20101213
006_KB2478960_20110207
007_KB2423089_20101213
007_KB2478971_20110207
007_KB2485663_20110411
008_KB2436673_20101213
008_KB2479628_20110207
008_KB2503658_20110411

Тоже самое и с порядковыми номерами файлов хотфиксов.

P.S.
Цитата:
:: Папка в которой будут созданы пустые папки со сквозной нумерацией (не понял зачем они, но пусть будет)
Я думал, что алгоритм работы батника будет построен таким образом, что сначала исходные папки сортируются-переименовываются, согласно исходной задаче, а потом из них копируются сами хотфиксы, переименованные в соответствии с порядковыми номерами отсортированных папок.

-------
Свобода не означает вседозволенность.


Последний раз редактировалось Nun-Nun, 17-01-2012 в 19:24.


Отправлено: 19:15, 17-01-2012 | #7


Аватара для gora

Ушёл из жизни


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

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


Nun-Nun, поправил, проверяйте

на Вашем наборе получил:
Код: Выделить весь код
001_KB2387149_20101011
002_KB2360131_20101012
003_KB931125_20101025
004_KB2467659_20101210
005_KB2416400_20101213
006_KB2423089_20101213
007_KB2436673_20101213
008_KB2440591_20101213
009_KB2443105_20101213
010_KB2419632_20110110
011_KB2393802_20110207
012_KB2476687_20110207
013_KB2478960_20110207
014_KB2478971_20110207
015_KB2479628_20110207
016_KB2483185_20110207
017_KB2485376_20110207
018_KB2479943_20110307
019_KB2483614_20110307
020_KB2524375_20110322
021_KB2412687_20110411
022_KB2485663_20110411
023_KB2503658_20110411
024_KB2506212_20110411
025_KB2506223_20110411
026_KB2507618_20110411
027_KB2508272_20110411
028_KB2508429_20110411
Цитата Nun-Nun:
сначала исходные папки сортируются-переименовываются »
Команды "переименовать" работает с файлами, но не с папками. Значит нужно сначала создать папку с новым именем, затем туда скопировать содержимое "переименовываемой" папки, а потом удалить исходную папку.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:28, 17-01-2012 | #8


Аватара для Nun-Nun

Ветеран


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

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


gora,

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

-------
Свобода не означает вседозволенность.


Отправлено: 19:55, 17-01-2012 | #9


Аватара для gora

Ушёл из жизни


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

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


Цитата Nun-Nun:
общая выходная папка пуста. »
У меня она полна и все нормально. Приведите пути в первых строках Вашего батника:
Код: Выделить весь код
Set InFld=e:\Temp 1\1\1
Set OutFld=e:\Temp 1\1\2
Set allfix=e:\Temp 1\1\2\AllFix
В папках фиксов в %InFld% есть фиксы? По одному в каждой папке? Список имен приведите.

Папка из переменной %allfix% до запуска скрипта создана? Она не создается скриптом...
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:07, 17-01-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - Программы для массового переименования каталогов и файлов Daiv Программное обеспечение Windows 39 17-06-2011 16:33
Прочие - Программа для сортировки файлов на диске Evgesha_572 Программное обеспечение Windows 4 21-09-2010 14:16
CMD/BAT - [решено] Нужна помощь в создании bat-ника для распаковки и переименования файлов/папок Nun-Nun Скриптовые языки администрирования Windows 6 14-05-2009 15:45
Утилиты для сортировки драйверов Гимран Автоматическая установка Windows 2000/XP/2003 4 03-01-2008 00:37




 
Переход