![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник для двойной сортировки и переименования |
|
|
CMD/BAT - [решено] Батник для двойной сортировки и переименования
|
Ветеран Сообщения: 2158 |
Нужен батник для следующей задачи: есть, например, куча разных хотфиксов для винды, причём каждый из хотфиксов расположен в отдельной папке, имеющей название, присвоенное по номеру и дате хотфикса. Нужно выполнить сортировку этих папок по дате и номеру с одновременным переименовыванием папок путём добавления в их название порядкового номера, затем перенести сами файлы хотфиксов из отдельных папок в одну общую папку, переименовывая при этом названия файлов путём добавления порядкового номера как у исходной папки. При этом сортировка папок хотфиксов должна выполняться в первую очередь по дате и затем по номеру хотфикса. Чтобы было понятнее поясню наглядно. Например, есть 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 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Nun-Nun, о постановке задачи:
1 Скобки являются спец. символом в CMD и использование их в именах усложняет обработку таких имен. Лучше от них (скобок в именах) сразу отказаться. 2 Даты проще обрабатывать в формате YYYYMMDD, дабы потом не вырезать лишние тире и не переворачивать даты, переводя их в формат удобный для сравнения в CMD. |
Отправлено: 14:09, 17-01-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2158
|
Профиль | Отправить PM | Цитировать gora,
Пусть будет и с учётом Ваших замечаний, правда мне ооочень долго придётся переименовывать те папки, что уже есть (а их набралось уже несколько сотен), но это не самое страшное, главное увидеть, как такая задача решается. ![]() |
------- Отправлено: 14:20, 17-01-2012 | #3 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата Nun-Nun:
2 Команды "перенести" в CMD нет. Либо "скопировать", либо "переместить". Последнее опять чревато невозможностью повторного запуска батника. 3 Если "переместить", то в результате у Вас останется одна папка со всеми фиксами у которых будут новые имена и куча пустых папок с новыми именами. Зачем нужны эти пустые переименованные папки? 4 Скрипт предназначен для однократного использования? Тогда лучше отказаться от этой идеи совсем. ИМХО. |
|
Последний раз редактировалось gora, 17-01-2012 в 16:18. Отправлено: 15:34, 17-01-2012 | #4 |
Ветеран Сообщения: 2158
|
Профиль | Отправить PM | Цитировать Цитата gora:
Цитата:
![]() Цитата gora:
Цитата gora:
![]() Цитата gora:
|
||||||
------- Последний раз редактировалось Nun-Nun, 17-01-2012 в 18:20. Отправлено: 18:07, 17-01-2012 | #5 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2158
|
Профиль | Отправить 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 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2158
|
Профиль | Отправить PM | Цитировать gora,
Проверил: пустые папки создались как положено с порядковой нумерацией, но с файлами хотфиксов ничего не происходит, общая выходная папка пуста. ![]() |
------- Отправлено: 19:55, 17-01-2012 | #9 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата Nun-Nun:
Папка из переменной %allfix% до запуска скрипта создана? Она не создается скриптом... |
|
Отправлено: 20:07, 17-01-2012 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие - Программы для массового переименования каталогов и файлов | 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 |
|