![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 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 |
Ветеран Сообщения: 2158
|
Профиль | Отправить PM | Цитировать gora,
Проверил: действительно, пропустил цифру 2 в пути. Исправил - всё работает! Огромнейшее спасибо! P.S. Есть один вопрос: существует ли возможность сохранить использование скобок или хотя бы знака "-" в названиях папок (в датах)? а то уж очень нечитаемо получается, если нужно что-то конкретное в этих перечнях найти. |
------- Последний раз редактировалось Nun-Nun, 17-01-2012 в 20:43. Отправлено: 20:34, 17-01-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Nun-Nun, скобки бывают не только круглые
![]() |
Отправлено: 21:41, 17-01-2012 | #12 |
Ветеран Сообщения: 2158
|
Профиль | Отправить PM | Цитировать Цитата Iska:
![]() |
|
------- Отправлено: 21:49, 17-01-2012 | #13 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата Nun-Nun:
![]() Цитата Nun-Nun:
На будущее, не используйте ни каких спец. символов в именах файлов\папок, если собираетесь их потом обрабатывать скриптами. |
||
Отправлено: 22:42, 17-01-2012 | #14 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать @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 :: Формат имен папок с фиксами :: KB931125_25-10-2010 :: KB2524375_22-03-2011 :: ==================================================================== :: Запись Значение :: :: Переменная полностью %var% 123456789 :: Первые три символа %var:~0,3% 123 :: Последние три символа %var:~-3% 789 :: Три символа начиная с шестого %var:~5,3% 678 :: Без первых трех символов %var:~3% 456789 :: Без последних трех символов %var:~0,-3% 123456 :: Без первых двух и последних трех %var:~2,-3% 3456 :: :: Замена части переменной (45 на abc) %var:45=abc% 123abc6789 :: Замена части переменной и символов :: до нее (23, и все что до этого, на xyz) %var:*23=xyz% xyz456789 :: Удаление части переменной (567) %var:567=% 123489 :: ==================================================================== RD /S /Q "%OutFld%" MD "%allfix%" For /F "UseBackQ Delims=" %%i In (`Dir "%InFld%" /B /AD /ON 2^>Nul`) Do ( Set ti=%%i Set dat=!ti:~-10! Set kb=0!ti:~2,-11! Set $!dat:~-4!!dat:~3,2!!dat:~0,2!!ti:~0,2!!kb:~-7!=%%i ) Set cnt=0 For /F "Tokens=1* Delims==" %%i In ('Set $') Do ( Set /A cnt +=1 Set cnt0=00!cnt! MD "%OutFld%\!cnt0:~-3!_%%j" 2>Nul For %%f In ("%InFld%\%%j\*.*") Do ( Rem Копирование пронумерованного фикса в общую папку Copy /Y "%InFld%\%%j\%%~nxf" "%allfix%\!cnt0:~-3!_%%~nxf" >Nul Rem Копирование пронумерованного фикса в пронумерованную папку. Если НЕ требуется, удалить строку Copy /Y "%InFld%\%%j\%%~nxf" "%OutFld%\!cnt0:~-3!_%%j\!cnt0:~-3!_%%~nxf" >Nul Rem Удаление исходной папки вместе с фиксом. Если требуется, раскомментировать строку Rem RD /S /Q "%InFld%\%%j" ) ) |
Последний раз редактировалось gora, 18-01-2012 в 16:04. Отправлено: 10:21, 18-01-2012 | #15 |
Ветеран Сообщения: 2158
|
Профиль | Отправить PM | Цитировать Огромнейшее спасибо! То, что нужно!
Попробовал батник в работе - вместо желаемого результата получил файл NulRem вот с такм содержанием (явно содержание батника, только покорченное): Не пойму, где я снова ухитрился наколбасить? Кроме исправления путей под свои и добавления команды Pause в конце батника больше ничего не трогал. ![]() |
Отправлено: 10:51, 19-01-2012 | #16 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Nun-Nun, прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!?
|
Отправлено: 11:31, 19-01-2012 | #17 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Nun-Nun, такое впечатление, что в конце строк нет символов перевода строки, поэтому отрабатывает лишь первая команда Echo.
gora, классная справка по издевательству над переменной. ![]() |
Отправлено: 11:47, 19-01-2012 | #18 |
Ветеран Сообщения: 2158
|
Профиль | Отправить PM | Цитировать Цитата gora:
|
|
------- Последний раз редактировалось Nun-Nun, 20-01-2012 в 21:27. Отправлено: 13:16, 19-01-2012 | #19 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать |
Отправлено: 13:29, 19-01-2012 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие - Программы для массового переименования каталогов и файлов | 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 |
|