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

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



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

    Цитата:
    только что-то я совпадающей подстроки там не вижу....

    Вот и я про это же! Интересно, товарищ, который сие публиковал в своем блоге знал об этом?

    Цитата:
    но правильнее аргументы разобрать

    Наверное ты прав. Просто саму функцию вызывать в той же vbs не очень удобно.

    Цитата:
    vbs я знаю ну очень поверхностно

    Тоже страдал оным, пока не прогулялся по этому адресу. И самое смешное начинал с вот этого. Кстати, там дамп статей в формате chm имеется. Хотя все же доминирующим в плане интересов у меня остаются именно батники и скрипты PowerShell.
    Да!!! Главное, что я хотел сказать! Debug довольно интересная штучка. Я тут поэксперементировал и пришел к весьма интересным выводам: при базовом знании ассемблера и наличии WinDbg в системе можно через батники создавать COM приложения. Правда оным дело не ограничивается: с помощью Debug в пакетном режиме можно хачить игрушки защищенные SecuROM'ом (правда получается пока довольно криво).

    Цитата:
    Но все равно выздоравливай быстрее

    Спасибо.

    Цитата:
    нефиг разлеживаться

    Я про тоже
     
    Добавлено:
    Цитирую сам себя:

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

    Идея была подчерпнута отсюда

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 19:49 30-06-2010 | Исправлено: ComradG, 19:51 30-06-2010
    anton1209

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

    Цитата:
     
    anton1209  
     
    Код:@ECHO OFF  
    CLS  
    :choise  
    SET /P ANSW="CHOiSE:"  
    IF /I "%ANSW%"=="1" START "VARIANT 1" /WAIT WGET тутПараметрыЗапуска && goto :eof  
    IF /I "%ANSW%"=="2" START "VARIANT 2" /WAIT WGET тутПараметрыЗапуска && goto :eof  
    ECHO WHAT?!  
    :goto choise  
     
     
    То или не то?  
     
    Добавлено:  
    res2001  
     Ага, чуток обработать...
     

     
    Батник работает, но варианты не выводит
     
    P.S. , Разобрался СПС!
     

    Цитата:
     
    @ECHO OFF  
    CLS  
    :choise  
    echo [1] Dr.Web CureIT
    echo [2] F-Secure
    SET /P ANSW="Please select"  
    IF /I "%ANSW%"=="1" START "Dr.Web CureIT" /WAIT WGET -P %cd%/drweb_cureit http://www.freedrweb.com/download+cureit/gr/?lng=ru && goto :eof  
    IF /I "%ANSW%"=="2" START "F-Secure" /WAIT WGET -P %cd%/fsecure_is2010 http://download.f-secure.com/estore/fs2010.exe && goto :eof  
    ECHO WHAT?!  
    :goto choise
     

    Всего записей: 28 | Зарегистр. 22-05-2010 | Отправлено: 20:21 30-06-2010 | Исправлено: anton1209, 20:23 30-06-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую всех.
    Недавно мы тут рассуждали об батнике-отладчике для бат-файлов. Ну, что ж, мои "оппоненты" привели достаточно серьёзные доводы против. Но я всё же подумал, что если батник нельзя создать, то бинарную прогу-то наверняка можно. Обратился к приятелю-кодеру. Тот посмеялся... А сегодня кинул мне по почте ссылку на сайт производителя тагой проги: http://www.steppingsoftware.com/ . Прога называется "Running Steps". Жаль, триальная, 30 дней, а в нашем варезнике её нет.
    Может кому интересно будет...

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 06:31 01-07-2010 | Исправлено: BVV63, 06:36 01-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сделал batch.xml для Notepad++. Удобная штука для новичков, для изучения. Файл нужен для автоподстановки (автозавершение функций). Всплывает окно, которое можно растянуть, посмотреть команды, или просто нажать Enter для вставки. Наверно такой файл нужно делать каждому под себя, редактируется легко.
    batch для notepad++.7z

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 06:50 01-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сталкнулся с такой проблемой.
    "Net Time" не изменяет переменную "ErrorLevel" в случае неудачной попытки синхронизации времени. Поэтому я использовал такую схему: "Net Time ... || Set ErrorLevel=1", для дальнейшей обработки ошибки (ну, или можно после || обрабатывать её сразу без промежуточной "ErrorLevel"). Но после того, как решил удалить из вывода лишние пустые строки посредством "| Find -r . 2>&1" то после этого перенаправления оператор || перестал работать. Подскажите, пожалуйста, как-то можно выкрутиться? Чтобы и вывод не пострадал, и батник получил бы данные об ошибке.
     
    Добавлено:
    Ладно, бес с ним. Можно прогу дважды выполнить. Один раз для результата, другой - для "доклада". Но!.. После перенаправления батник отказывается напрочь работать с %ErrorLevel% (Echo %ErrorLevel%, а в ответ - тишина). Причём не только в данной процедуре (или подпрограмме?), но и в родительском батнике. Как после перенаправления вернуть всё на круги своя? Т. е. чтобы STDERR снова нормально фунциклировал.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 07:27 01-07-2010 | Исправлено: BVV63, 08:44 01-07-2010
    res2001



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

    Цитата:
    Более того, после перенаправления батник отказывается напрочь работать с %ErrorLevel% (Echo %ErrorLevel%, а в ответ - тишина). Как после перенаправления вернуть всё на круги своя?

    После перенаправления значение errorlevel по любому будет уже не верно, оно будет тем, что установила команда find, а не net time. Я бы посоветовал с net time отправлять в файл >>nettime.log, а потом уже разбирать этот лог findом.
     

    Цитата:
    "Net Time" не изменяет переменную "ErrorLevel" в случае неудачной попытки синхронизации времени. Поэтому я использовал такую схему: "Net Time ... || Set ErrorLevel=1", для дальнейшей обработки ошибки (ну, или можно после || обрабатывать её сразу без промежуточной "ErrorLevel").

    1.Руками errorlevel устанавливать не стоит. Если уж так хочется заведи переменную с другим именем.
    2.действительно, лучше обрабатывать сразу.
    3.раз уж net time не устанавливает значение errorlevel, то, по моему,  и оператор || будет отрабатывать не верно.
     
    Похоже команда net действует аналогично sc, т.е. сама она фактически ничего не делает, а дает команду соответствующим службам. Если у службы ничего не получилось, это еще не означает, что net выполнилась с ошибкой.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 08:44 01-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Пока Вы отвечали я чуток исправил свой вопрос. Можно дважды сподряд выполнить команду, раз - для результата, второй - для "доклада". Но как мне восстановить после бывшего перенаправления STDERR?
     
    Добавлено:
    res2001

    Цитата:
    3.раз уж net time не устанавливает значение errorlevel, то, по моему,  и оператор || будет отрабатывать не верно.

    Нет он отрабатывал верно. Я давно заметил, что он работает и тогда, когда не помогает %ErrorLevel%. Не знаю, чем объяснить, но проверил на практике.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 08:47 01-07-2010 | Исправлено: BVV63, 08:51 01-07-2010
    res2001



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

    Цитата:
    А сегодня кинул мне по почте ссылку на сайт производителя тагой проги: http://www.steppingsoftware.com/

    Собственно, никто не говорил, что таких продуктов нет. Смысл наших постов сводится к тому, что надобность в таком отладчике сомнительная, поскольку хватает и стандартных средств.
    Такой отладчик будет полезен либо тому кто без него не представляет работы, либо на какой-нить фабрике батов, где занимаются разработкой софта исключительно на батниках  
     
    Интересно сколько экземпляров этого отладчика продала фирма производитель?
     
    ЗЫ: видел в свое время серьезную разработку выполненную на языке шела под соляркой. Но на батниках ничего подобного не встречал.
     
    Добавлено:
    BVV63

    Цитата:
    Нет он отрабатывал верно. Я давно заметил, что он работает и тогда, когда не помогает %ErrorLevel%. Не знаю, чем объяснить, но проверил на практике.

    хорошо если так.

    Цитата:
    Но как мне восстановить после бывшего перенаправления STDERR?  

    можно разные дескрипторы перенаправлять в разные файлы:
    net time 1>>good.log 2>>err.log

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 08:52 01-07-2010
    BVV63



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

    Цитата:
    можно разные дескрипторы перенаправлять в разные файлы:  
    net time 1>>good.log 2>>err.log

    Не хотелось бы. Т. е. после перенаправления 2>&1, всё, уже стандартный вывод ошибок не восстановить? Что ж, тогда от перенаправления придётся отказаться...

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:00 01-07-2010
    mugil_cephalus

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

    Цитата:
    При включенной расширенной обработке команд доступны несколько переменных
    среды, которые не отображаются в списке, отображаемом при вызове команды SET.
    Значения этих переменных вычисляются динамически каждый раз при их извлечении.
    Если пользователь явно задает переменные с одним из этих имен,
    то это определение перекрывает соответствующее динамическое определение,
    описанное ниже:

     
    %CD% - раскрывается в строку текущей директории.
     
    %DATE% - раскрывается в текущую дату, используя тот же формат команды DATE.
     
    %TIME% - раскрывается в текущую дату, используя формат команды TIME.
     
    %RANDOM% - раскрывается в случайное десятичное число между 0 и 32767.
     
    %ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL
     
    %CMDEXTVERSION% - раскрывается в текущее значение версии
                        расширенной обработки команд.
     
    %CMDCMDLINE% - раскрывается в исходную командную строку, которая вызвала
    командный процессор.

    выполни в батнике с net любые команды и errorlevel всегда будет один и тот же - 1 , как ты егои установил  

    Цитата:
    || Set ErrorLevel=1",  

     http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=1380#12

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



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

    Цитата:
    После перенаправления значение errorlevel по любому будет уже не верно, оно будет тем, что установила команда find, а не net time.

    Решил проверить:
    Net Time /Domain:<домен> /Set /Yes | FindStr /R . || Echo Failure!
    Когда подставлял несуществующий домен отрабатывало эхо, когда правильный - нет.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:27 01-07-2010
    mugil_cephalus

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

    Цитата:
    Net Time /Domain:<домен> /Set /Yes | FindStr /R . || Echo Failure!

    в этом примере echo работает по результатам findstr

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 09:35 01-07-2010
    BVV63



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

    Цитата:
    выполни в батнике с net любые команды и errorlevel всегда будет один и тот же - 1 , как ты егои установил

    ? Так я же его устанавливал не до того, как вызвать Net, а лишь в случае ошибки.
     
    Добавлено:
    mugil_cephalus

    Цитата:
    в этом примере echo работает по результатам findstr

    Т. е. при ошибке на findstr не подаётся ничего по STDOUT (текст ошибки идёт по STDERR), и та выдаёт ошибку? Что ж, возможно. Я такой возможности не учёл.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:35 01-07-2010 | Исправлено: BVV63, 09:39 01-07-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    ну в случае ошибки на весь батник будет один и тот же %errorlevel% ...
    тебе правильный совет дал res2001

    Цитата:
    1.Руками errorlevel устанавливать не стоит. Если уж так хочется заведи переменную с другим именем.  

    типа

    Код:
    set "errlvl=1"

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 09:42 01-07-2010
    res2001



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

    Цитата:
    Решил проверить:
    Net Time /Domain:<домен> /Set /Yes | FindStr /R . || Echo Failure!
    Когда подставлял несуществующий домен отрабатывало эхо, когда правильный - нет.

    Понятно, почему отрабатывает - просто когда net time пишет все STDERR, то на вход find ничего не подается и она сама заканчивается с ошибкой, что и вызывает срабатывание echo failure. Это удачное стечение обстоятельств
    А вот, например замени find на cd . и увидишь, что echo не срабатывает, в случае ошибки net time.
     
    Добавлено:
    что-то я стал долго сообщения писать уходит много времени на проверку

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:44 01-07-2010
    mugil_cephalus

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

    Цитата:
    Т. е. при ошибке на findstr не подаётся ничего по STDOUT (текст ошибки идёт по STDERR),  

    временно убери из кода
    Цитата:
    || Set ErrorLevel=1",  

    и на следующ. строке - echo.%errorlevel%   (какой выдаст ? )

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 09:49 01-07-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Я понял логику. Но я просто не использую %ErrorLevel% для самого батника, лишь для фрагментов. Сами процедуры "отсчитываются" перед материнским батником при помощи трёх переменных %Warnings%, %Errors% и %Failures%, тот их перемножает на коэффициенты и складывает, а затем "отсчитывается" уже передо мной. Так что %ErrorLevel% я использую чисто в локальных выражениях, посему могу позволить себе править его руками.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:50 01-07-2010
    mugil_cephalus

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

    Цитата:
    что-то я стал долго сообщения писать  уходит много времени на проверку

    до мурманска дошло московское пекло ?...

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 09:53 01-07-2010
    BVV63



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

    Цитата:
    и на следующ. строке - echo.%errorlevel%   (какой выдаст ? )

    Можно такой вопрос: зачем после "echo" стоит точка? Вначале я подумал, что это эквивалент двух вырахений: "echo." и "echo %errorlevel%", но что с точкой, что с пробелом вывод одинаков.
    Или просто таков "стиль" ?

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:56 01-07-2010 | Исправлено: BVV63, 09:58 01-07-2010
    mugil_cephalus

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

    Цитата:
    Но я просто не использую %ErrorLevel% для самого батника, лишь для фрагментов. Сами процедуры "отсчитываются" перед материнским батником при помощи трёх переменных %Warnings%, %Errors% и %Failures%, тот их перемножает на коэффициенты и складывает, а затем "отсчитывается" уже передо мной.  

    "вертикаль власти" ...  
    а если ошибешся, запутаешся, зачем усложнять систему?.. ; имхо, не рационально ; в математике проверяют : чем решение проще, тем "лучше" , правильнее ...
     
    Добавлено:
    BVV63

    Цитата:
    Можно такой вопрос:

    чтоб на случай ошибки батнописца ( например отсутствует переменная ) не было бы так  
    F:\>echo
    Режим вывода команд на экран (ECHO) включен.

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 10:01 01-07-2010 | Исправлено: mugil_cephalus, 10:02 01-07-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