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

Компьютерный форум 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

 

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

Ветеран


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

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


gora,

Проверил: действительно, пропустил цифру 2 в пути. Исправил - всё работает! Огромнейшее спасибо!

P.S. Есть один вопрос: существует ли возможность сохранить использование скобок или хотя бы знака "-" в названиях папок (в датах)? а то уж очень нечитаемо получается, если нужно что-то конкретное в этих перечнях найти.

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


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


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



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

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


Ветеран


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

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


Nun-Nun, скобки бывают не только круглые . А по формату даты gora совершенно прав — привыкайте использовать формат YYYYMMDD.

Отправлено: 21:41, 17-01-2012 | #12


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

Ветеран


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

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


Цитата Iska:
скобки бывают не только круглые »
А круглые скобки и не обязательно, можно и квадратные или "<" ">", или вообще без скобок, если дата со знаком "-". Что до формата YYYYMMDD, то я не против, просто удобнее читать и искать при YYYY-MM-DD, чем YYYYMMDD.

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


Отправлено: 21:49, 17-01-2012 | #13


Аватара для gora

Ушёл из жизни


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

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


Цитата Nun-Nun:
можно и ... "<" ">" »
Вот этого Вам даже система не позволит сделать!
Цитата Nun-Nun:
просто удобнее читать и искать при YYYY-MM-DD »
Завтра подправлю скрипт для Вашего формата даты (12-07-2009 = DD-MM-YYYY), но круглые скобки убирайте руками.
На будущее, не используйте ни каких спец. символов в именах файлов\папок, если собираетесь их потом обрабатывать скриптами.
Это сообщение посчитали полезным следующие участники:

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


Аватара для gora

Ушёл из жизни


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

Профиль | Отправить 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


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

Ветеран


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

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


Огромнейшее спасибо! То, что нужно!

Попробовал батник в работе - вместо желаемого результата получил файл NulRem вот с такм содержанием (явно содержание батника, только покорченное):

читать дальше »
OffSetLocal EnableDelayedExpansion:: Папка с исходными папками фиксовSet InFld=C:\Temp\111\Source:: Папка в которой будут созданы пустые папки со сквозной нумерацией (не понял зачем она, но пусть будет)Set OutFld=C:\Temp\111\Target:: Папка в которую копируются переименованные файлы фиксовSet allfix=C:\Temp\111\AllTarget:: Формат имен папок с фиксами:: KB931125_25-10-2010:: KB2524375_22-03-2011:: ====================================================================:: Запись Значение:::: Переменная полностью 123456789:: Первые три символа ~0,3: Последние три символа ~-3: Три символа начиная с шестого ~5,3: Без первых трех символов ~3: Без последних трех символов ~0,-3: Без первых двух и последних трех ~2,-3: :: Замена части переменной (45 на abc) 45=abc: Замена части переменной и символов:: до нее (23, и все что до этого, на xyz) *23=xyz: Удаление части переменной (567) 567=: ====================================================================RD /S /Q ""MD ""For /F "UseBackQ Delims=" %i In (`Dir "" /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=0For /F "Tokens=1* Delims==" %i In ('Set $') Do ( Set /A cnt +=1 Set cnt0=00!cnt! MD "\!cnt0:~-3!_%j" For %f In ("\%j\*.*") Do (Rem Копирование пронумерованного фикса в общую папку Copy /Y "\%j\%~nxf" "\!cnt0:~-3!_%~nxf" Копирование пронумерованного фикса в пронумерованную папку. Если НЕ требуется, удалить строку Copy /Y "\%j\%~nxf" "\!cnt0:~-3!_%j\!cnt0:~-3!_%~nxf" Удаление исходной папки вместе с фиксом. Если требуется, раскомментировать строкуRem RD /S /Q "\%j" ))Pause


Не пойму, где я снова ухитрился наколбасить? Кроме исправления путей под свои и добавления команды Pause в конце батника больше ничего не трогал.

Отправлено: 10:51, 19-01-2012 | #16


Аватара для gora

Ушёл из жизни


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

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


Nun-Nun, прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!?
Это сообщение посчитали полезным следующие участники:

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


Аватара для El Sanchez

Ветеран


Contributor


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

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


Nun-Nun, такое впечатление, что в конце строк нет символов перевода строки, поэтому отрабатывает лишь первая команда Echo.

gora, классная справка по издевательству над переменной.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:47, 19-01-2012 | #18


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

Ветеран


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

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


Цитата gora:
прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!? »
Спецсимволов не использовал. Вот батник:

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


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


Отправлено: 13:16, 19-01-2012 | #19


Аватара для gora

Ушёл из жизни


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

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


Nun-Nun
Попробуйте прописать
Код: Выделить весь код
Set allfix=C:\Temp\111\Target\AllTarget
У меня эта папка вложенная в %OutFld% и потому строки работают корректно:
Код: Выделить весь код
RD /S /Q "%OutFld%"
MD "%allfix%"
Или замените последние на:
Код: Выделить весь код
RD /S /Q "%OutFld%"
RD /S /Q "%allfix%"
MD "%OutFld%"
MD "%allfix%"
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:29, 19-01-2012 | #20



Компьютерный форум 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




 
Переход