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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    mugil_cephalus

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

    Код:
    mode con cols=80 lines=25
    title %~n0
    chcp
    chcp 1251>nul
    cd /d "F:\Documents and Settings\admin\Избранное"
    chcp
    chcp 866>nul
    ver
    pause

     
       
     
    2)

    Код:
    mode con cols=80 lines=25
    title %~n0
    chcp
    chcp 1251>nul
    cd /d "F:\Documents and Settings\admin\Избранное"
    chcp
    REM chcp 866>nul
    ver
    pause

     
       
     
    поясню: сравни результат визуализации в консоли команды ver в обоих случаях

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



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

    Цитата:
    сравни  

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

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Объясните пожалуйста
     
    Подробнее...

    Код:
    @echo off
    optipng.exe -i0 -zc1-9 -zm1-9 -zs0-3 -f0-5 %1 > "%~dp0Docs\png.log" || exit 1
    for /f "delims==,IDAT tokens=5" %%i in ("%~dp0Docs\png.log") do (
        set f=%%i
    )
    set f=%f:~1,1%
    del "%~dp0Docs\png.log"
    pngout.exe /k0 /n /f%f% %1 || exit 3

     
    не работает цикл оптимизация PNG (Interlace - Noninterlaced)
    не правильно работает вывод запроса (если в папке Images нет соответсвующих файлов, то запрос не должен выводится). а у меня все равно выводится

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 19:57 21-03-2010 | Исправлено: lorents, 20:35 21-03-2010
    yurkesha



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

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

    Цитата:
    сравнил, в обоих случаях одинаковые английские буквы. что дальше?
    английские - одинаковы, а русские? Конкретно слово Версия...
     
    А все потому что chcp меняет отображаемую кодировку у всего сеанса...


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 20:06 21-03-2010
    wolf0425



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

    Цитата:
    А все потому что chcp меняет отображаемую кодировку у всего сеанса...  
    что ты называешь всем сеансом то?  
    на отображение результата уже выполненных команды chcp не влияет никак - отображение консоли у меня вообще работает в 1200 кодировке независимо от chcp. Уникод форева... chcp только объясняет из какой страницы фонта брать символы при выводе и в какой кодировке работает передача аргументов. всё.
     
     

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Ты ошибся со скриншотом... Посмотри еще раз внимательнее. И "наехал" на человека по ошибке...
     
    Добавлено:
    А то что я ошибся - признаю - по крайней мере я ни на кого со своей ошибкой не наехал...
    Есть просто утилиты которые возвращают свой вывод всегда в CP866...
     
    Добавлено:
    И кстати отрабатывать это может по разному из скрипта и просто набранное в консоли...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 23:30 21-03-2010 | Исправлено: yurkesha, 23:35 21-03-2010
    king_stiven

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

    Цитата:
    если в папке Images нет соответсвующих файлов, то запрос не должен выводится). а у меня все равно выводится

    Так ищется в папке Images или ещё и в подпапках её тоже? Если без подпапок то

    Код:
    if not exist "Images\*.png" echo фалов нет

     
    а вот это неправильно

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

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



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

    Цитата:
    Ты ошибся со скриншотом...  
    c чьим? Вся серия скриншотов началась с того, что человек ставил chcp 1251 перед "%~dp0Docs\pngcrush.exe" с обоснованием что в 866 кодировке там неправильно раскроются русские буквы в пути.
    после этого начали друг друга лечить

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:07 22-03-2010 | Исправлено: wolf0425, 00:10 22-03-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    call "%~dp0Docs\png.cmd"  
    может расширение писать bat? Для cmd есть какие то заморочки.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Цитата:
    че сравнивать то -  руки выпрями сначала  
    и научись имя в команду вставлять в той кодировке, в которой батник команду исполняет.
    твои слова? Скрины перед этим твоим постом не очень вежливым... Я понимаю что трудно извиниться перед человеком(не в твоих правилах), но может все-таки? mugil_cephalus совсем не заслужил оскорбления в той ситуации...
    А я так мимо - проходил Уже прошел дальше...
     


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 00:17 22-03-2010
    wolf0425



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

    Цитата:
    может расширение писать bat? Для cmd есть какие то заморочки.
    совершенно никакой разницы какое расширение писать в данном случае.
    вся разница между расширениями - как отрабатываются некоторые команды внутри, и заморочки - это как раз у бат.
     
     
     
    Добавлено:

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

    мои. и скрины - таки являются иллюстрацией кривизны рук:  
    с прямыми руками - ни команда cd ни команда ver никаких кракозябр не выдают, почему-то:
       
    Хотя увидев массовые кракозябры на его скринах - я неправильно определил их причину, да. потому что ожидал все же скринов, относящихся к теме предыдущей дискуссии.
     

    Цитата:
    А я так мимо - проходил Уже прошел дальше...  
    вот и ходи мимо.

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    1) оба кода от http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=520#2 имеют единственное различие в скрипте (красная помета) - REM
    2) для обоих кодов - режим command-line batch mode
    3) причины повторной инверсии - chcp 866 - тебе объяснил yurkesha

    Цитата:
    английские - одинаковы, а русские? Конкретно слово Версия...  

    4а) про причину первой смены кодировки - chcp 1251 - я думал ты понял, так как я еще раньше написал об этом пост -
    Цитата:
    если "%~dp0Docs\pngcrush.exe" раскроется в c:\кириллица\Docs\pngcrush.exe
    - http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=500#17
    4б) привожу повторный пример:
    у этого скрипта тоже только единственное различие (выделено)
     

    Код:
    mode con cols=80 lines=25
    title %~n0
    chcp
    REM chcp 1251>nul
    cd /d "F:\Documents and Settings\admin\Избранное"
    chcp
    chcp 866>nul
    ver
    pause

     
     
       
     
     
     
     
    Добавлено:
    lorents

    Цитата:
    Код: "%~dp0Docs\pngcrush.exe"  
     
    попытался прописать все свой экзешники через этот код, то мой батник не запускается

    может в твоем большом коде где-то надо "%~dp0Docs\pngcrush.exe" , а где-то - "%~dp1Docs\pngcrush.exe"   ??
     
    Добавлено:
    king_stiven

    Цитата:
    а вот это неправильно  
     
    Код:for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do if /i "_%%~i" equ "_" goto:loop2  

    кот тестил, - он не отрабатывает; а где ошибка?

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



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

    Цитата:
    Так ищется в папке Images или ещё и в подпапках её тоже? Если без подпапок то  

    здесь все правильно

    Цитата:
    call "%~dp0Docs\png.cmd"  

    проблема именно в этой строке, почему не понимаю

    Цитата:
    может расширение писать bat? Для cmd есть какие то заморочки.

    попробовал, тот же результат.

    Цитата:
    а вот это неправильно  

    а как правильно?
     
    mugil_cephalus

    Цитата:
    может в твоем большом коде где-то надо "%~dp0Docs\pngcrush.exe" , а где-то - "%~dp1Docs\pngcrush.exe"   ??  

    не вышло, если отключить эту строку то цикл работает
     
    смотрите, если png.bat прописать так

    Код:
    @echo off
    "%~dp0Docs\optipng.exe" -i0 -zc1-9 -zm1-9 -zs0-3 -f0-5 %1 > "%~dp0Docs\png.log" || exit 1
    for /f "delims==,IDAT tokens=5" %%i in ("%~dp0Docs\png.log") do (
        set f=%%i
    )
    set f=%f:~1,1%
    del "%~dp0Docs\png.log"
    "%~dp0Docs\pngout.exe" /k0 /n /f%f% %1 || exit 3

    а в Web Image Optimizer.bat прописать строку

    Код:
    call png.bat "%%~fi"

    то все работает, остается вопрос как сделать чтобы он работал и в папке Docs тоже

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

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

    Цитата:
    а как правильно?  


    Цитата:
    Если без подпапок то  
     
    Код:if not exist "Images\*.png" echo фалов нет  

    вот так правильно
     
    Добавлено:

    Цитата:
    кот тестил, - он не отрабатывает; а где ошибка?

    данный код подразумевает: что только если есть хоть одна переменная Images\*.png , то выполняется команда
    do if /i "_%%~i" equ "_" goto:loop2    
    Предположим есть Images\*.png , тогда
    if /i "_%%~i" equ "_"  
    никогда выполняться не будет
    а если нет ни одной переменной Images\*.png, то команда
    do if /i "_%%~i" equ "_" goto:loop2  
    как и любая другая команда тем более выполняться не будет, так как нет ни одной переменной
    lorents
    при запуске кода в чёрном окошечке выделяй и копируй сюда. какие ошибки пишет. трудно быть телепатом.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:48 22-03-2010 | Исправлено: king_stiven, 12:26 22-03-2010
    dronxumuk

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди, еще с одной проблемой столкнулся. Нужно скопировать из одной папки в другую некоторые файлы. Отбор идет по имени.
     
    через robocopy сделал, но на хрюше сия команда не идет.
    через for не догоняю как сделать. В хелпе мало информации(((
     
    Подсобите, а?

    Всего записей: 7 | Зарегистр. 14-09-2008 | Отправлено: 13:40 22-03-2010
    king_stiven

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

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



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

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

    Цитата:
    1) оба кода от имеют единственное различие в скрипте (красная помета) - REM  

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

    Цитата:
    4а) про причину первой смены кодировки - chcp 1251 - я думал ты понял, так как я еще раньше написал об этом пост -  
    я понял что ты совершенно не понимашь зачем нужна эта команда, и выше тебе это писал уже вроде. с картинками.
     

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:18 22-03-2010 | Исправлено: wolf0425, 16:34 22-03-2010
    dronxumuk

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
     
    в файле конфигурации устанавливаем переменные:

    Код:
     
    rem             Здесь вы перечисляете наименования обновляемых ИБ  через пробел  
     
    set Baselist=quest pap law
     
    rem             Здесь вы указываете путь к устройству чтения дисков или флэшке
     
    set StorageANS=F:\_пополнение\
     
    rem             Здесь вы указываете путь к папке Consultant:
     
    set Consultant=d:\consultant\
     

     
    нужно заставить машину копировать файлы с именами  %Baselist% из дирректории %StorageANS% в дирректорию %Consultant%receive
     
    команду robocopy не предлагать.

    Всего записей: 7 | Зарегистр. 14-09-2008 | Отправлено: 16:35 22-03-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dronxumuk
    Цитата:
    через robocopy сделал, но на хрюше сия команда не идет.  
    что значит не идет? замечательно идет - robocopy сначала скопируй куда надо.
     
    Добавлено:

    Цитата:
    нужно заставить машину копировать файлы с именами  %Baselist% из дирректории %StorageANS% в дирректорию %Consultant%receive  

    Код:
    for %%a in ( %Baselist% ) do copy /b "%StorageANS%%%a" "%Consultant%receive\*"


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:35 22-03-2010 | Исправлено: wolf0425, 16:40 22-03-2010
    dronxumuk

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

    Цитата:

    Код:
    for %%a in ( %Baselist% ) do copy /b "%StorageANS%%%a" "%Consultant%receive\*"

    всего-то звездочку не поставил в конце, потому сразу и не пошло.
    Спасибо!
     

    Цитата:
    что значит не идет? замечательно идет - robocopy сначала скопируй куда надо.

     
    Что Вы имеете в виду?

    Всего записей: 7 | Зарегистр. 14-09-2008 | Отправлено: 16:47 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