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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    StarkCh



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток!  
    Необходимо переименовать файлы, созданные по маске ГГГГ-ММ-ДД_ЧЧММСС-filename.jpg
    (2010-03-22_165800-IMGP2524.jpg к примеру)  
    путем прибавления (убавления) определенного числа (к примеру прибавить 1 час 10 минут - получится 2010-03-22_180800-IMGP2524.jpg).
     
    Подскажите как это сделать?

    Всего записей: 52 | Зарегистр. 05-10-2008 | Отправлено: 16:55 22-03-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    StarkCh
    Очень много возни, разбивка числа на часы минуты секунды, складывание, учитывание 60 минут, учитывание дат, короче может кто другой знает полегче. И в шапке всё внимательно посмотри, там есть примеры с датами через VBS скрипты.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 18:29 22-03-2010 | Исправлено: king_stiven, 18:38 22-03-2010
    mugil_cephalus

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

    Цитата:
    не объяснил, а объяснял, причем неверно.  
    Специально чтоб показать что руки кривые - я привел скриншот где кракозябр вообще нет, всё раскрываеться правильно (на эту тему вообще 3 скриншота), команды - те же самые.  
    научись делать скриншоты помельче, кстати, задрал своей гигантоманией.  

    где у меня на втором скриншоте "версия" без кракозябр?

    Цитата:
    И оба кода не имеют никакого отношения к тому как отработает вызов "%~dp0Docs\pngcrush.exe".  
    просто совсем никакого.  

    да не имеют, их цель - демонстрация слова "версия" кракозябрами

    Цитата:
    а ты сам то видишь что у тебя в примере на этом новом скриншоте - cd не срабатывает из-за несовпадения кодировки батника и текущей кодовой страницы?  

     я это и пытаюсь тебе объяснить, - что если первый раз не менять кодировку на 1251, то команда cd не срабатывает
    p.s.
    резюме
    1) первый раз меняем кодировку на 1251, чтобы сраьотало cd
    2) второй раз производим инверсию на 866 - чтобы слово "версия" и все прочее визуализировалось в консоли без кракозябр

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 19:13 22-03-2010 | Исправлено: mugil_cephalus, 19:18 22-03-2010
    wolf0425



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

    Цитата:
     я это и пытаюсь тебе объяснить, - что если первый раз не менять кодировку на 1251, то команда cd не срабатывает  
    она не срабатывает только если имя каталога указывать в неправильной кодировке - что делать никто не заставляет. на предыдущей странице  минимум один скриншотов с примером как команда cd замечательно срабатывает без команды cp 1251.
    в команде "%~dp0Docs\pngcrush.exe".   кодировка буковок по определению правильная - её подставляет сам cmd в соответствии с cp, и проблемы могут быть только если символы имени пути не имеют однозначного соответствия в текущей кодировке. Но на такие случаи и cp 1251 ничуть не панацея - имя то может попасться хоть иероглифами.  
     

    Цитата:
    где у меня на втором скриншоте "версия" без кракозябр?  
    достаточно что кракозябры вообще на скриншоте есть.

    Цитата:
    да не имеют, их цель - демонстрация слова "версия" кракозябрами  

    на предыдущей странице также есть скриншот, где слово "версия" выдано той же программой без кракозябр и в 866 и в 1251 кодировках, подряд.  
    так что кракозябры, заморочки с лишними переключениями кодировки, и проблемы с руками - таки коррелируют.
     
     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 20:25 22-03-2010 | Исправлено: wolf0425, 20:30 22-03-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Вот посмотрите это мой проект
    http://webfile.ru/4376150
    У меня следующая проблема

    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do if /i "_%%~i" equ "_" goto:loop2

    надо сделать, что если нет файлов png в папке Images или его подпапках, то запрос не должен вводится

    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do if /i "_%%~i" equ "_" goto:loop3

    здесь тоже самое только для jpeg  
    И если возможно то запросы должны появится, то можно ли сделать чтобы они шли подряд?

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 20:35 22-03-2010
    wolf0425



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

    Цитата:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do if /i "_%%~i" equ "_" goto:loop2  
    надо сделать, что если нет файлов png в папке Images или его подпапках, то запрос не должен вводится  
    этот for и так что-то проверяет  только если есть файл, попадающий под маску Images\*.png.  
    с учетом того что "_%%~i" никогда не может быть равно "_" - переход никогда не выполнится, строка не делает совершенно ничего.
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 20:57 22-03-2010 | Исправлено: wolf0425, 21:02 22-03-2010
    mugil_cephalus

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

    Цитата:
    она не срабатывает только если имя каталога указывать в неправильной кодировке - что делать никто не заставляет.  

    а как указать "правильную" кодировку в блокноте, где и пишутся, в основном, bat-файлы ? только поставив предварительно -  chcp.
    1) на 1-ом скрине - команда cd работает, потому что команда chcp меняет исходную - 866 - кодировку на 1251
    2) на 2-ом скрине - команда cd работает по этой же причине, но, не возвращая кодировку с 1251 на исходную - 866, - появляются кракозябры в "версия"  
    3) на 3-ей скрине - команда cd не работает, потому что команда chcp не меняет исходную - 866 - кодировку на 1251

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 21:01 22-03-2010 | Исправлено: mugil_cephalus, 21:03 22-03-2010
    lorents



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

    Цитата:
    с учетом того что "_%%~i" никогда не может быть равно "_" - переход никогда не выполнится, строка не делает совершенно ничего.  

    а как тогда надо?

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 21:05 22-03-2010
    wolf0425



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

    Цитата:
    а как указать "правильную" кодировку в блокноте, где и пишутся, в основном, bat-файлы ? только через chcp.
    никогда не писал bat-файлы в блокноте - как-то предпочитал нормальные редакторы, и батники в 866 кодировке - чтобы ничего никуда не переключать.
    последний год регулярно пишу в 1251 - но опять же не в блокноте.

    Цитата:
    1) на 1-ом скрине - команда cd работает, потому что команда chcp меняет исходную - 866 - кодировку на 1251  
    и какое это имеет отношение к "%~dp0Docs\pngcrush.exe" ?

    Цитата:
    2) на 2-ом скрине - команда cd работает по этой же причине, но, не возвращая кодировку с 1251 на исходную - 866, - появляются кракозябры в "версия"  
    кракозябры там появляются потому что у тебя выбранный фонт не умеет отображать символы в 1251 - в которой, в соответствии со сделанным тобой выбором, ver тебе пишет свой вывод.
    он пишет ровно то что ты от него просил, с нормальным фонтом - выглядит всё нормально, смотри скриншоты. 866 и 1251 надписи - вперемешку и без кракозябр.

    Цитата:
    3) на 3-ей скрине - команда cd не работает, потому что команда chcp не меняет исходную - 866 - кодировку на 1251
    не работает потому что в команде cd путь указан в неправильной кодировке - не той что выбрана. Указывать в правильной - не проблема, к выбору cp это отношения не имеет.
    примеров что можно указывать в правильной кодировке, оставаясь в 866, и иметь вывод без кракозябр - там полстраницы.
     
     
     
     
    Добавлено:lorents
    Цитата:
    а как тогда надо?
    а мне то откуда знать - я же не знаю что ты там вообще хочешь.
    писать за тебя батник целиком мне откровенно лень -  с таким количеством помощников ты должен был сам давно разобраться и написать.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:15 22-03-2010 | Исправлено: wolf0425, 21:26 22-03-2010
    mugil_cephalus

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

    Цитата:
    никогда не писал bat-файлы в блокноте - как-то предпочитал нормальные редакторы, и батники в 866 кодировке - чтобы ничего никуда не переключать.  
    последний год регулярно пишу в 1251 - но опять же не в блокноте.  

    позавидовать можно

    Цитата:
    и какое это имеет отношение к "%~dp0Docs\pngcrush.exe" ?  

    если "%~dp0Docs\pngcrush.exe" раскроется в c:\кириллица\Docs\pngcrush.exe и Текущая кодовая страница: 866

    Цитата:
    кракозябры там появляются потому что у тебя выбранный фонт не умеет отображать символы в 1251 - в которой, в соответствии со сделанным тобой выбором, ver тебе пишет свой вывод.  
    он пишет ровно то что ты от него просил.  

    и как я на фонт повлияю?

    Цитата:
    не работает потому что в команде cd путь указан в неправильной кодировке - не той что выбрана. Указывать в правильной - не проблема,  

    в блокноте, где и пишу скрипты, я этого не смогу

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 21:27 22-03-2010
    wolf0425



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

    Цитата:

    Цитата:
    что значит не идет? замечательно идет - robocopy сначала скопируй куда надо.
    Что Вы имеете в виду?  
    что robocopy - не входит в комплект ХР, её надо скачивать и ставить отдельно.
    просто не нужна настолько навороченная тулза для твоих мелких потребностей - а вообще она крута и замечательно под ХР работает.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:30 22-03-2010
    lorents



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

    Цитата:
    а мне то откуда знать - я же не знаю что ты там вообще хочешь.
    писать за тебя батник целиком мне откровенно лень -  с таким количеством помощников ты должен был сам давно разобраться и написать.

    Я все понимаю, я очень благодарен Всем кто мне помогал, выходит остается решить последнюю проблему

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 21:31 22-03-2010
    wolf0425



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

    Цитата:
    и какое это имеет отношение к "%~dp0Docs\pngcrush.exe" ?  

    если "%~dp0Docs\pngcrush.exe" раскроется в c:\кириллица\Docs\pngcrush.exe и Текущая кодовая страница: 866  
    она раскроется правильно - в соответствии с той кодовой страницей, которая будет выбрана на момент исполнения. Будет 866 - подставится c:\кириллица* в 866, будет 1261 - подставится c:\кириллица* в 1251, будет 20866 - подставится c:\кириллица* в кои-8. Во всех случаях имя будет соответствовать текущей кодировке и ошибки не будет.
    Чем спорить - давно бы проверил, а не писал примеры где не cmd подставляет правильное имя, а ты напрямую прописываешь неправильное и пытаешься лечить то при подстановке правильного имени - работать перестанет... Или внимательно смотрел те скрины что я давал - там было что-то на тему %~dp0.

    Цитата:
    и как я на фонт повлияю?  
    в заголовке окна консоли.  
    на люсиду переключи, если надоело на кракозябры в 1251 смотреть.
     

    Цитата:
    в блокноте, где и пишу скрипты, я этого не смогу
    зато в cmd, где эти скрипты исполняются - получить не проблема.
    А ещё часто из логов,отчетов и прочих конфигов читаешь в той кодировке, в которой их писали - а не которая сейчас нравится.
     
    lorents
    Цитата:
    надо сделать, что если нет файлов png в папке Images или его подпапках, то запрос не должен вводится  
    вместо строки с for вставь
    Код:
    1>nul 2>nul dir /b /s /a-d Images\*.png || goto:loop2  

    вообще ты наверно хотел написать так:

    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do goto:loop1
    goto:loop2
    но for тут нафиг не нужен

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:45 22-03-2010 | Исправлено: wolf0425, 22:02 22-03-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    if not exist "Images\*.png" goto loop2
     
     
    if not exist "Images\*.png" goto loop3

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 22:07 22-03-2010
    mugil_cephalus

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

    Цитата:
    она раскроется правильно - в соответствии с той кодовой страницей, которая будет выбрана на момент исполнения. Будет 866 - подставится c:\кириллица* в 866, будет 1261 - подставится c:\кириллица* в 1251, будет 20866 - подставится c:\кириллица* в кои-8. Во всех случаях имя будет соответствовать текущей кодировке и ошибки не будет.  
    Чем спорить - давно бы проверил, а не писал примеры где не cmd подставляет правильное имя, а ты напрямую прописываешь неправильное и пытаешься лечить то при подстановке правильного имени - работать перестанет... Или внимательно смотрел те скрины что я давал - там было что-то на тему %~dp0.

    проверил через %~dp0 - да, ты прав

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 22:28 22-03-2010
    Punktir

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно все файлы с именем 123.txt во вложенных директориях заменить файлом c:\123.txt
    Надеюсь, что батником возможно. Спасибо.

    Всего записей: 37 | Зарегистр. 20-10-2007 | Отправлено: 22:31 22-03-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Цитата:
    lorents
    if not exist "Images\*.png" goto loop2  
    не стыкуется с заданием
    Цитата:
    если нет файлов png в папке Images или его подпапках
    нужно ли именно такое задание - науке неизвестно, но зачем-то вписал же.
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 22:38 22-03-2010 | Исправлено: wolf0425, 22:41 22-03-2010
    lorents



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

    Цитата:
    вместо строки с for вставь

    Все работает, спасибо
    А можно не много по другому, если нет файлов png, то просто не выводим запрос без перехода к loop2
    А почему если в папке есть и файлы png и jpeg, то выводится запрос только по файлу png?
    Просто у меня задача обработать, все файлы png и jpeg

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 22:39 22-03-2010 | Исправлено: lorents, 22:42 22-03-2010
    wolf0425



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

    Цитата:
    А можно не много по другому, если нет файлов png, то просто не выводим запрос без перехода к loop2  
    впиши переход куда надо - какие проблемы то?
     

    Цитата:
    А почему если в папке есть и файлы png и jpeg, то выводится запрос только по файлу png?
    потому что у тебя goto:eof стоит после обработки png.
    И кстати метка :loop2 стоит после фор-проверки, а не перед.
     
    и на втором выборе у тебя опять переход по меткам :1 :2 :3 - сработают те метки что в начале файла. Переименовывай.
     
     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 22:45 22-03-2010 | Исправлено: wolf0425, 22:48 22-03-2010
    lorents



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

    Цитата:
    потому что у тебя goto:eof стоит после обработки png.
    И кстати метка :loop2 стоит после фор-проверки, а не перед.  

    Вы не могли бы показать это на моем примере, не сочтите за наглость, я честно уже не соображаю
    Подробнее...

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 22:50 22-03-2010 | Исправлено: lorents, 22:52 22-03-2010
       

    Страницы: 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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru