CMD/BAT - [решено] Батник для двойной сортировки и переименования
-
Nun-Nun
Re: CMD/BAT - [решено] Батник для двойной сортировки и переименования
gora,
Проверил: действительно, пропустил цифру 2 в пути. Исправил - всё работает! Огромнейшее спасибо!
P.S. Есть один вопрос: существует ли возможность сохранить использование скобок или хотя бы знака "-" в названиях папок (в датах)? а то уж очень нечитаемо получается, если нужно что-то конкретное в этих перечнях найти.
Проверил: действительно, пропустил цифру 2 в пути. Исправил - всё работает! Огромнейшее спасибо!
P.S. Есть один вопрос: существует ли возможность сохранить использование скобок или хотя бы знака "-" в названиях папок (в датах)? а то уж очень нечитаемо получается, если нужно что-то конкретное в этих перечнях найти.
-
Iska
Re: CMD/BAT - [решено] Батник для двойной сортировки и переименования
Nun-Nun, скобки бывают не только круглые
. А по формату даты gora совершенно прав — привыкайте использовать формат YYYYMMDD.
. А по формату даты gora совершенно прав — привыкайте использовать формат YYYYMMDD.-
Nun-Nun
Re: CMD/BAT - [решено] Батник для двойной сортировки и переименования
Цитата Iska:
скобки бывают не только круглые
А круглые скобки и не обязательно, можно и квадратные или "", или вообще без скобок, если дата со знаком "-".
Что до формата YYYYMMDD, то я не против, просто удобнее читать и искать при YYYY-MM-DD, чем YYYYMMDD.
скобки бывают не только круглые
CMD/BAT - [решено] Батник для двойной сортировки и переименования
А круглые скобки и не обязательно, можно и квадратные или "", или вообще без скобок, если дата со знаком "-".
Что до формата YYYYMMDD, то я не против, просто удобнее читать и искать при YYYY-MM-DD, чем YYYYMMDD.-
gora
Re: CMD/BAT - [решено] Батник для двойной сортировки и переименования
Цитата Nun-Nun:
можно и ... ""
Вот этого Вам даже система не позволит сделать!
Цитата Nun-Nun:
просто удобнее читать и искать при YYYY-MM-DD
Завтра подправлю скрипт для Вашего формата даты (12-07-2009 = DD-MM-YYYY), но круглые скобки убирайте руками.
На будущее, не используйте ни каких спец. символов в именах файлов\папок, если собираетесь их потом обрабатывать скриптами.
можно и ... ""
CMD/BAT - [решено] Батник для двойной сортировки и переименования
Вот этого Вам даже система не позволит сделать!

Цитата Nun-Nun:
просто удобнее читать и искать при YYYY-MM-DD
CMD/BAT - [решено] Батник для двойной сортировки и переименования
Завтра подправлю скрипт для Вашего формата даты (12-07-2009 = DD-MM-YYYY), но круглые скобки убирайте руками.
На будущее, не используйте ни каких спец. символов в именах файлов\папок, если собираетесь их потом обрабатывать скриптами.
-
gora
Re: CMD/BAT - [решено] Батник для двойной сортировки и переименования
Код:
Код: Выделить всё
@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 - [решено] Батник для двойной сортировки и переименования
Огромнейшее спасибо! То, что нужно!
Попробовал батник в работе - вместо желаемого результата получил файл 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 в конце батника больше ничего не трогал.
Попробовал батник в работе - вместо желаемого результата получил файл 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 - [решено] Батник для двойной сортировки и переименования
Nun-Nun, прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!?
-
El Sanchez
Re: CMD/BAT - [решено] Батник для двойной сортировки и переименования
Nun-Nun, такое впечатление, что в конце строк нет символов перевода строки, поэтому отрабатывает лишь первая команда Echo.
gora, классная справка по издевательству над переменной.
gora, классная справка по издевательству над переменной.

-
Nun-Nun
Re: CMD/BAT - [решено] Батник для двойной сортировки и переименования
Цитата gora:
прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!?
Спецсимволов не использовал. Вот батник:
прикрепите Ваш файл скрипта к посту. Может быть у Вас в путях спец. символы!?
CMD/BAT - [решено] Батник для двойной сортировки и переименования
Спецсимволов не использовал. Вот батник:
-
gora
Re: CMD/BAT - [решено] Батник для двойной сортировки и переименования
Nun-Nun
Попробуйте прописать
Код:
У меня эта папка вложенная в %OutFld% и потому строки работают корректно:
Код:
Или замените последние на:
Код:
Попробуйте прописать
Код:
Код: Выделить всё
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%"