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

Ответить
 • Просмотры: 1
Аватара пользователя
Nun-Nun

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

Сообщение Nun-Nun »

gora,



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



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

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

Сообщение Iska »

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

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

Сообщение Nun-Nun »

Цитата Iska:



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




А круглые скобки и не обязательно, можно и квадратные или "", или вообще без скобок, если дата со знаком "-". Изображение Что до формата YYYYMMDD, то я не против, просто удобнее читать и искать при YYYY-MM-DD, чем YYYYMMDD.
Аватара пользователя
gora

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

Сообщение gora »

Цитата Nun-Nun:



можно и ... ""
CMD/BAT - [решено] Батник для двойной сортировки и переименования




Вот этого Вам даже система не позволит сделать! Изображение
Цитата Nun-Nun:



просто удобнее читать и искать при YYYY-MM-DD
CMD/BAT - [решено] Батник для двойной сортировки и переименования




Завтра подправлю скрипт для Вашего формата даты (12-07-2009 = DD-MM-YYYY), но круглые скобки убирайте руками.

На будущее, не используйте ни каких спец. символов в именах файлов\папок, если собираетесь их потом обрабатывать скриптами.
Аватара пользователя
gora

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

Сообщение gora »

Код:

Код: Выделить всё

@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"	
	)
)
Аватара пользователя
Nun-Nun

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

Сообщение Nun-Nun »

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



Попробовал батник в работе - вместо желаемого результата получил файл 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 в конце батника больше ничего не трогал. Изображение
Аватара пользователя
gora

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

Сообщение gora »

Nun-Nun, прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!?
Аватара пользователя
El Sanchez

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

Сообщение El Sanchez »

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



gora, классная справка по издевательству над переменной. Изображение
Аватара пользователя
Nun-Nun

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

Сообщение Nun-Nun »

Цитата gora:



прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!?
CMD/BAT - [решено] Батник для двойной сортировки и переименования




Спецсимволов не использовал. Вот батник:
Аватара пользователя
gora

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

Сообщение gora »

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%"
Ответить

Вернуться в «Скриптовые языки администрирования Windows»