![]() |
Батник для двойной сортировки и переименования
Нужен батник для следующей задачи: есть, например, куча разных хотфиксов для винды, причём каждый из хотфиксов расположен в отдельной папке, имеющей название, присвоенное по номеру и дате хотфикса. Нужно выполнить сортировку этих папок по дате и номеру с одновременным переименовыванием папок путём добавления в их название порядкового номера, затем перенести сами файлы хотфиксов из отдельных папок в одну общую папку, переименовывая при этом названия файлов путём добавления порядкового номера как у исходной папки. При этом сортировка папок хотфиксов должна выполняться в первую очередь по дате и затем по номеру хотфикса. Чтобы было понятнее поясню наглядно. Например, есть 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 |
Nun-Nun, о постановке задачи:
1 Скобки являются спец. символом в CMD и использование их в именах усложняет обработку таких имен. Лучше от них (скобок в именах) сразу отказаться. 2 Даты проще обрабатывать в формате YYYYMMDD, дабы потом не вырезать лишние тире и не переворачивать даты, переводя их в формат удобный для сравнения в CMD. |
gora,
Пусть будет и с учётом Ваших замечаний, правда мне ооочень долго придётся переименовывать те папки, что уже есть (а их набралось уже несколько сотен), но это не самое страшное, главное увидеть, как такая задача решается. :) |
Цитата:
2 Команды "перенести" в CMD нет. Либо "скопировать", либо "переместить". Последнее опять чревато невозможностью повторного запуска батника. 3 Если "переместить", то в результате у Вас останется одна папка со всеми фиксами у которых будут новые имена и куча пустых папок с новыми именами. Зачем нужны эти пустые переименованные папки? 4 Скрипт предназначен для однократного использования? Тогда лучше отказаться от этой идеи совсем. ИМХО. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Для папок формата:
KB849762_20110203 KB849768_20110203 KB976453_20090712 KB2345788_20100518 KB2356788_20100508 KB2545788_20110522 попробуйте так: Код:
@Echo Off |
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, поправил, проверяйте
на Вашем наборе получил: Код:
001_KB2387149_20101011 Цитата:
|
gora,
Проверил: пустые папки создались как положено с порядковой нумерацией, но с файлами хотфиксов ничего не происходит, общая выходная папка пуста. :( |
Цитата:
Код:
Set InFld=e:\Temp 1\1\1 Папка из переменной %allfix% до запуска скрипта создана? Она не создается скриптом... |
gora,
Проверил: действительно, пропустил цифру 2 в пути. Исправил - всё работает! Огромнейшее спасибо! P.S. Есть один вопрос: существует ли возможность сохранить использование скобок или хотя бы знака "-" в названиях папок (в датах)? а то уж очень нечитаемо получается, если нужно что-то конкретное в этих перечнях найти. |
Nun-Nun, скобки бывают не только круглые ;). А по формату даты gora совершенно прав — привыкайте использовать формат YYYYMMDD.
|
Цитата:
|
Цитата:
Цитата:
На будущее, не используйте ни каких спец. символов в именах файлов\папок, если собираетесь их потом обрабатывать скриптами. |
Код:
@Echo Off |
Огромнейшее спасибо! То, что нужно!
Попробовал батник в работе - вместо желаемого результата получил файл NulRem вот с такм содержанием (явно содержание батника, только покорченное): Не пойму, где я снова ухитрился наколбасить? Кроме исправления путей под свои и добавления команды Pause в конце батника больше ничего не трогал. :sorry: |
Nun-Nun, прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!?
|
Nun-Nun, такое впечатление, что в конце строк нет символов перевода строки, поэтому отрабатывает лишь первая команда Echo.
gora, классная справка по издевательству над переменной. :up |
Цитата:
|
Nun-Nun
Попробуйте прописать Код:
Set allfix=C:\Temp\111\Target\AllTarget Код:
RD /S /Q "%OutFld%" Код:
RD /S /Q "%OutFld%" |
gora,
Взял один свой старый батник и заменил в нём содержимое на содержимое Вашего батника - сразу же всё заработало. Похоже, виновником проблемы является Akelpad 4.5.1, с помощью которого создавался первый (проблемный) батник. Причём, заработало во всех возможных вариантах - и с вложенной подпапкой AllTarget и с невложенной, и без добавления и с добавлением команд: Цитата:
При таком раскладе я решил над батником ещё малость поиздеваться: запустил его сначала без папки Target, потом без папки AllTarget, а на последок - без обеих папок. Батник ругается только при отсутствии папки Target, что мол, не найден файл, но, тем не менее, во всех случаях отрабатывает нормально! Ваш батник просто волшебный!!! :) Не кривя душой, могу сказать: перед Вашим мастерством снимаю шляпу! СПАСИБО!!!!!!!!!! |
Время: 03:18. |
Время: 03:18.
© OSzone.net 2001-