Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5

Модерирует : KLASS, IFkO

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

   

Nagual



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачи на bat-файлах 5
(часть 1, часть 2, часть 3 , часть 4)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85
    Попробуй

    Код:
    Echo off
    for /f "usebackq delims=" %%i in (`dir /b /a-d "*.png"`) do call :RenFile "%%~i"
    Goto :eof
    :RenFile
    set "name=%~n1"
    if not "%name:~-11,1%"==" " (
      set "name1=%name:~0,-18%20%name:~-12,2%.%name:~-15,2%.%name:~-18,2% %name:~-10%"
      ren "%~dpnx1" "%name1%%~x1"
    )
    Goto :eof

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:01 09-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Твой батник, после замены маски стал почти нормально работать, со скобкой какой-то сбой...просто интересно, как это исправить?

    Код:
    07,08,08(05-06-51).png
    Копия 07,08,08(05-06-51).png
    Копия (2) 07,08,08(05-06-51).png
     

     

    Код:
    Копия 2008.08.07 (05-06-51).png
    2008.08.07 (05-06-51).png
    Копи2008.2) 07.я  (08

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 22:03 09-08-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85

    Цитата:
    изменив тут маску на "*,??,*.png" все стало работать как надо

    С такой маской он будет заменять во всех файлах, а не только .png

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:05 09-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    NIKZZZZ
    Попробуй

    Код:
    Echo off
    for /f "usebackq delims=" %%i in (`dir /b /a-d "*.png"`) do call :RenFile "%%~i"
    Goto :eof
    :RenFile
    set "name=%~n1"
    if not "%name:~-11,1%"==" " (
      set "name1=%name:~0,-18%20%name:~-12,2%.%name:~-15,2%.%name:~-18,2% %name:~-10%"
      ren "%~dpnx1" "%name1%%~x1"
    )
    Goto :eof


    Код:
    07,08,08(05-06-51).png
    Копия 07,08,08(05-06-51).png
    Копия (2) 07,08,08(05-06-51).png
     

    Итог:

    Код:
    .png
    2008.08.07 (05-06-51).png
    Копия (2) 2008.08.07 (05-06-51).png

    Интересный результат...первый результат пустой в независимости от имени оригинала...
     
     
     
     
    Добавлено:
    NIKZZZZ

    Цитата:
    С такой маской он будет заменять во всех файлах, а не только .png  

    Ничего подобного! Во-первых расширение в маске, также указано .png, во-вторых я на всякий случай проверил с другими расширениями
     
    Добавлено:
    Рано я обрадовался
     
    NIKZZZZ

    Код:
    07,08,08(05-06-51) xyz.png
    Копия 07,08,08(05-06-51) xyz.png
    Копия (2) 07,08,08(05-06-51) xyz.png
     

     

    Код:
    07,0205-.8(.8, 06-51) xyz.png
    Копия 07,0205-.8(.8, 06-51) xyz.png
    Копия (2) 07,0205-.8(.8, 06-51) xyz.png

    Можешь свой первый батник исправить, чтобы если текст идет после скобки тоже нормально переименовывалось?
     
    Добавлено:
    01MDM
    А твой батник дает сбой только на скобке...

    Код:
    07,08,08(05-06-51) xyz.png
    Копия 07,08,08(05-06-51) xyz.png
    Копия (2) 07,08,08(05-06-51) xyz.png

     

    Код:
    2008.08.07 (05-06-51) xyz.png
    Копия 2008.08.07 (05-06-51) xyz.png
    Копи2008.2) 07.я  (08(05-06-51) xyz.png

    поправка: такой результат со строкой for /f "tokens=1,2,3,* delims=-.,(" %%i in ("%%a") do (
     
    а с той, что была for /f "tokens=1-4 delims=,(" %%i in ("%%a") do (

    Код:
    2008.08.07 (05-06-51) x
    Копия 2008.08.07 (05-06-51) x
    Копи2008.2) 07.я  (08


    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 22:10 09-08-2008 | Исправлено: 19w85, 23:46 09-08-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85

    Цитата:
    чтобы если текст идет после скобки тоже нормально переименовывалось?  

    Если текст после скобки не содержит "(", довольно просто. Иначе нужен четкий критерий.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:31 09-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ

    Цитата:
    Если текст после скобки не содержит "(", довольно просто. Иначе нужен четкий критерий.

    А как же тогда тут

    Код:
    for /f "tokens=1,2,3,* delims=-.,(" %%a in ('dir /b "??,*.png"') do ren "%%a,%%b,%%c(%%d" "20%%c.%%b.%%a (%%d"

    реализовано переименование, в независимости идут ли в последующем тексте скобки или нет? Там просто вся концовка начиная с первой скобки переносится в конец нового имени...
     
     
    Добавлено:
    Вот тестовые имена на которых я остановился:

    Код:
    echo. >"07,08,08(05-06-51) x(yz.png"
    echo. >"Копия 07,08,08(05-06-51) x(yz.png"
    echo. >"Копия (2) 07,08,08(05-06-51) x(yz.png"

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 22:39 09-08-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85

    Цитата:
    Вот тестовые имена на которых я остановился


    Код:
    Echo off
    echo. >"07,08,08(05-06-51) x(yz.png"
    echo. >"Копия 07,08,08(05-06-51) x(yz.png"
    echo. >"Копия (2) 07,08,08(05-06-51) x(yz.png"
    for /f "usebackq delims=" %%i in (`dir /b /a-d "*.png"`) do call :RenFile "%%~i"
    Goto :eof
    :RenFile
    set "name=%~n1"
    Set "RightStr="
    Set "LeftStr=%name%"
    :_1
    If  "%LeftStr%"=="" GoTo :eof
    If  "%RightStr:~0,1%%RightStr:~3,1%%RightStr:~6,1%%RightStr:~9,1%"=="(--)" GoTo _2
    Set "RightStr=%LeftStr:~-1%%RightStr%
    Set "LeftStr=%LeftStr:~0,-1%
    GoTo _1
    :_2
    set "name1=%LeftStr:~0,-8%20%LeftStr:~-2,2%.%LeftStr:~-5,2%.%LeftStr:~-8,2% %RightStr%"
    ren "%~dpnx1" "%name1%%~x1"
    Goto :eof

     
    Текст справа не должен содержать "(??-??-??)"

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 23:22 09-08-2008 | Исправлено: NIKZZZZ, 23:24 09-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Чего-то ничего не переименовывается...

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 23:29 09-08-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85

    Цитата:
    Чего-то ничего не переименовывается

    Странно, возможно опять проблема с копированием батника (лишние пробелы и т.п.)?
    После запуска получаю:

    Код:
    2008.08.07 (05-06-51) x(yz.png
    Копия 2008.08.07 (05-06-51) x(yz.png
    Копия (2) 2008.08.07 (05-06-51) x(yz.png

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 23:37 09-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ

    Цитата:
    Странно, возможно опять проблема с копированием батника (лишние пробелы и т.п.)?

    Да, точно
    Все работает спасибо
     
    Теперь осталось дождаться 01MDM, если он сможет исправить свой батник для поставленной задачи, будет вообще отлично...т.к. у него более простой или лично для меня более понятный батник, т.е. чтобы в будущем я смог адаптировать его для какой-нибудь другой задачи...

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 23:58 09-08-2008 | Исправлено: 19w85, 00:04 10-08-2008
    xyxy

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    http://www.spam_detected/start-5348.html

    Всего записей: 23 | Зарегистр. 10-08-2008 | Отправлено: 00:02 10-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    А вот 2-ой запуск и:

    Код:
    200207 .8..8. (05-06-51) x(yz.png
    Копия 200207 .8..8. (05-06-51) x(yz.png
    Копия (2) 200207 .8..8. (05-06-51) x(yz.png
     

    Так что придется мою маску все-таки использовать

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 00:04 10-08-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85

    Цитата:
    А вот 2-ой запуск и

    В данном батнике нет проверки на то, что файлы уже переименованы. Это не сложно сделать, но нужен какой-либо критерий. Например, пробел перед "(??-??-??)" подойдет ?

    Код:
    Echo off
    echo. >"07,08,08(05-06-51) x(yz.png"
    echo. >"Копия 07,08,08(05-06-51) x(yz.png"
    echo. >"Копия (2) 07,08,08(05-06-51) x(yz.png"
    for /f "usebackq delims=" %%i in (`dir /b /a-d "*.png"`) do call :RenFile "%%~i"
    Goto :eof
    :RenFile
    set "name=%~n1"
    Set "RightStr="
    Set "LeftStr=%name%"
    :_1
    If  "%LeftStr%"=="" GoTo :eof
    If  "%RightStr:~0,1%%RightStr:~3,1%%RightStr:~6,1%%RightStr:~9,1%"=="(--)" GoTo _2
    Set "RightStr=%LeftStr:~-1%%RightStr%
    Set "LeftStr=%LeftStr:~0,-1%
    GoTo _1
    :_2
    If "%LeftStr:~-1%"==" " GoTo :eof
    set "name1=%LeftStr:~0,-8%20%LeftStr:~-2,2%.%LeftStr:~-5,2%.%LeftStr:~-8,2% %RightStr%"
    ren "%~dpnx1" "%name1%%~x1"
    Goto :eof


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 00:21 10-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    В данном батнике нет проверки на то, что файлы уже переименованы. Это не сложно сделать, но нужен какой-либо критерий. Например, пробел перед "(??-??-??)" подойдет ?

    Так а какой смысл? Чем не подходит простой отбор по маске "*,??,*.png" ?

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 00:27 10-08-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85

    Цитата:
    Так а какой смысл? Чем не подходит простой отбор по маске "*,??,*.png" ?

    Да в общем, можно и так. Но маска немного примитивна ...
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 00:40 10-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ

    Цитата:
    Но маска немного примитивна ...

    Предложи более продвинутую

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 00:49 10-08-2008 | Исправлено: 19w85, 00:51 10-08-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85

    Цитата:
    Предложи более продвинутую

    Ну, хотя-бы "*,??,??(??-??-??)*.png"

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 01:00 10-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Ну, хотя-бы "*,??,??(??-??-??)*.png"

    Можно и так...
     
    Добавлено:

    Цитата:
    Ну, хотя-бы

    А почему "хотя бы"? Разве можно еще лучше маску придумать?

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 01:19 10-08-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    19w85

    Цитата:
    Теперь осталось дождаться 01MDM

    Вот мой вариант, тестировался на файлах с названиями:
     
    07,08,08(05-06-51).png
    x(y)z07,08,08(05-06-51).png
    x,yz07,08,08(05-06-51).png
    xyz07,08,08(05-06-51).png
    x-yz07,08,08(05-06-51).png
    !xyz07,08,08(05-06-51).png
     

    Код:
     
    @echo off
    setlocal
    for %%i in (*.png) do call:ren "%%i"
    goto:eof
     
    :ren
    set "new=%~1"
    set "p=%new:~0,-22%"
    set "d=%new:~-22,8%"
    set "t=%new:~-14%"
     
    echo %d% | findstr \. 1>nul && goto:eof
     
    for /f "tokens=1-3 delims=," %%i in ("%d%") do set "d=20%%k.%%j.%%i"
    ren %1 "%p%%d%%t:(= (%"
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 04:52 10-08-2008 | Исправлено: 01MDM, 06:11 10-08-2008
    xyxy

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    http://www.spam_detected/start-5348.html

    Всего записей: 23 | Зарегистр. 10-08-2008 | Отправлено: 07:07 10-08-2008
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru