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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот с sed'ом трабл, надо без оного, только встроенными средствами. Можно как-нить сделать так?

    Код:
    for /F "usebackq delims=" %%i in (`Find /I "%name_razdel%=" %FileToRead%`) do set Value=%FileToRead%[строка(%%i)+1]

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 15:41 02-09-2010 | Исправлено: Maximus777, 16:07 02-09-2010
    wolf0425



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

    Цитата:
    Вот с sed'ом трабл, надо без оного, только встроенными средствами

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

    Цитата:
    Можно как-нить сделать так? [строка(%%i)+1]  
    можно, но не нужно - если кто-то в инишник впишет пустую строку, комментарий или просто переставит строки секции местами - работать перестанет. и это не сильно и короче будет, чем рчной разбор строк на секции.
     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 16:25 02-09-2010 | Исправлено: wolf0425, 16:29 02-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    знаю как делать, оказывается консольный ввод и вывод в винде устроен таким образом
    type my.txt | clip.exe
    когда батник доходит до выполнения этой команды, команда type сначала начинает распечатывать файл в буфер консоли пока он не закончится 4 кб, когда он закончится или закончится поток, выполняется вторая половинка команды - запускается программа клип.екзе, которая считывает 4 кб, после чего следующая порцайка ну и тд  
    вот только не понятно как сразу получить полный размер. придется возится с ресайзом выделеной памяти, в которую копируется весь поток и потом просто указатель буфера обмена на него переводится
     
    Добавлено:
    ну то есть можно хоть 100 мб так скопировать, только бы оперативки хватило
     
    Добавлено:
    а сам клип.екзе написан на Visual Studio 2010, видимо не самый оптимальный язык, но и написана полная обработка ошибок, то есть практически после каждого более или менее важного оператора стоит обработка возможных ошибок, из за такой параноилной корректности так и радулась программа до 25 кб, хотя большинство этих ошибок так или иначе выдала бы система

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:00 02-09-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    Да я уже твою 2-килобайтную использую))) мне нужно то - строка текста и все

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 21:22 02-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    завтра может доделаю - я еще с изменением размера выделенной памяти не делал ничего. а щас тут с видеоадаптером замыкаю
     
    Добавлено:
    просто не понятно как делать - выделить 10 мб а потом обрезать или по 4 кб добавлять - надо больше почитать про память чтоб стало понятно чем такое кончится

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 21:27 02-09-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sed -nr "/\/><a href=\"/s/^.*\/><a href=\"(.*)\".*$/\1/pg" index.php
     
    sed должна искать строку, содержащую:
    /><a href="
    и выводить:
    .............><br /><br ><a href="ftp://media.net/incoming" ><div alig..................
     
    Пишет Непредвиденное появление: <.
    Причём пишет cmd  а не sed
    А если убрать из скрипта двойную кавычку экранированную знаком \ , то работает, но двойные кавычки не убираются. Не пойму, чем экранировать двойную кавычку .

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 00:12 03-09-2010 | Исправлено: king_stiven, 00:32 03-09-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброй ночи всем.
     
    Помогите пож-ста в решении проблемы, я не знаю как это реализовать...
    Есть батники которые делают разные отчеты в htm и логи в txt и есть батник в котором прописанны параметры отправки по почте этих отчетов,
    и те и этот скомпилированны в exe-шники и прикрученны как сервисы для того что бы можно было выборочно включать и выключать те или иные
    отчеты по мере надобности. Так вот, тот бвтник в котором прописанны параметры отправки по почте этих отчетов, он у меня как почтовый сервис.
    Его смысл заключается в том что бы при отключенном почтовом сервисе уведомления по почте не приходили, но логи писались бы.
    Информация в логах и почтовых уведомлениях разная, и логи ни при каких обстоятельствах отключать нельзя...
    Так вот, суть проблемы заключается в том что при отключении почтового сервиса уведомления все равно приходят, так как те сервисы которые
    создают отчеты в htm и логи в txt обращаются не посредственно к ФАЙЛУ почтового сервиса, который лежит на диске С, и им всеравно отключен ли
    этот сервис или нет.
    На данный момент в том батнике (скомпилированном в exe) который делает отчеты в htm и логи в txt прописанно -
     
    Call c:\Mail.exe
     
    Дальше этот "Mail.exe" рассылает почтовые уведомления адресатам...
    Вопрос, можно ли реализовать батник который делает разные отчеты в htm и логи в txt таким образом что бы он обращался не посредственно к почтовому сервису, и если этот сервис запущен, то что бы он ТОЛЬКО ТОГДА направлял команду на Call c:\Mail.exe...?
    И если такой вариант возможен, то приведите пож-ста хотя бы пример кода который нужно прописать в место "Call c:\Mail.exe"...
     
    Заранее благодарю, надеюсь на ответ...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 01:36 03-09-2010 | Исправлено: Mark_Titov, 01:44 03-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    CURRENT.EXE
    до 1 мб копирует. увеличить чета не получилось, обрезать удалось, от перекодировки отказался - неправильно перекодирует русский текст, кодировку надо самому в батнике менять на 1251. потом еще поковыряюсь может лучше получится.  
    echo off и просто запуск она отличает
     
    Добавлено:
    а в микрософтовском клипе скорее всего ошибка. когда делал у меня тоже так получилось как у них - ошибки не выдает, а копирует до 4174X2. сам не понял почему но исправил
     
    Добавлено:
    наверно консоль так работает что количество символов не всегда до полного размера буфера типа такого...

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 04:42 03-09-2010
    01MDM



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

    Код:
     
    tasklist | 1>nul findstr mail.exe && call c:\mail.exe  
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 07:12 03-09-2010
    Free_Soft



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

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 08:20 03-09-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, спасибо, верно, можно и так, чего-то я не подумал о этом.
    Исходя из этого можно же и проверку статуса самого сервиса сделать?
    Ну типа проверки запущен или нет сам сервис, если запущен, то Call c:\Mail.exe, если нет то goto begin...
    Я думаю что это надежнее будет?
    Можешь подсказать как это можно сделать?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 08:54 03-09-2010 | Исправлено: Mark_Titov, 08:55 03-09-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Цитата:
    А если убрать из скрипта двойную кавычку экранированную знаком \ , то работает, но двойные кавычки не убираются. Не пойму, чем экранировать двойную кавычку .
    хексом её подставь, \x22
     
     
     
    Добавлено:
    Mark_Titov

    Цитата:
    и если этот сервис запущен, то что бы он ТОЛЬКО ТОГДА направлял команду

    а проверить состояние вервиса через sc перед вызовом - чем-то не устраивает?
     
    И если рассылкой занимается сервис - как получилось что его ещё и вызывать надо, а не он сам находит отсылаемые данные в каком-то списке?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 09:19 03-09-2010
    Mark_Titov



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

    Цитата:
    как получилось что его ещё и вызывать надо, а не он сам находит отсылаемые данные в каком-то списке?

    В нем прописанны ТОЛЬКО почтовые параметры и список рассылки, и все, он не должен находить отсылаемые данные, этим занимается другие сервисы...
     
    Добавлено:

    Цитата:
    а проверить состояние вервиса через sc перед вызовом

    Я про то и говорю, просто с sc не справлюсь сам...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 09:37 03-09-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Цитата:
    просто с sc не справлюсь сам...
    ну это же вроде для тебя писали показывалку/отключалку сервисов. ты до сих пор не разобрался как она работает???
     
     
    Добавлено:
    на раз нашел там подходящую строку, которую легко можно упростить до нужного перехода.
    sc %server% query !_service_%reply%! | findstr /r /b /c:" *STATE " | 1>nul find "RUNNING" &&  Echo Service is running!
    комп удаляешь, имя сервиса вписываешь жестко...
     
    Добавлено:

    Цитата:
    В нем прописанны ТОЛЬКО почтовые параметры и список рассылки, и все,
    тогда в чем смысл того, что он прописан в системе как сервис?
    никаких сервисных функций ты на него не навесил.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 09:42 03-09-2010 | Исправлено: wolf0425, 09:49 03-09-2010
    Mark_Titov



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

    Цитата:
    тогда св чем смысл того, что он прописан в системе как сервис?

    Я же выше все написал вроде...
    При остановке оного, письма не будут отсылаться, а только ЛОГИ писаться будут на винт...
     
    Добавлено:
    А где его имя вписать в этой строке, что бы он не все сервисы проверял, а только его...?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 09:50 03-09-2010 | Исправлено: Mark_Titov, 09:51 03-09-2010
    wolf0425



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

    Цитата:
    А где его имя вписать в этой строке,
    вместо  !_service_%reply%!  
     
     
    Добавлено:

    Цитата:
    При остановке оного, письма не будут отсылаться, а только ЛОГИ писаться будут на винт...  
    да он у тебя и запущенный ничего не отсылает пока его как команду не запустят.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 10:42 03-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    она делает именно так как выдает строку батник. попробуй
    echo KKKKK| MY.TXT и увидишь что это батник ставит, чтоб его не было
     
    type my.txt|current.exe  
     
    Добавлено:
    а если его убрать то тогда в текстовыъ файлах обрехается последний знак.
    зхначит параметры надо делать комманднйо строки
     
    Добавлено:
    впрочем щас вот так попробую  

    Цитата:
     
    <nul set /p strTemp=Весь этот текст  
    <nul set /p strTemp=будет находиться  
    <nul set /p strTemp=на одной строке.
     

     
    Добавлено:
    вот зараза а так пробел ставит
     
    Добавлено:
    ну естественно ехо ставит перенос иначе бы текст всегда был в одну строку

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:35 03-09-2010
    Mark_Titov



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

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

    Он всего лишь нужен для того что бы можно было им управлять, и всего-то...
    А сейчас когда прикрутили функцию проверки состояния этого сервиса, все стало на свои места.
    Теперь, запускаешь почтовый сервис - письма идут, останавливаешь его - писем нет, как и должно быть...
     
    Благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 13:59 03-09-2010 | Исправлено: Mark_Titov, 14:19 03-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    CURRENT.EXE
     
    так попробуй
    CURRENT.EXE  
    выводит в консоль соджержимое буфера обмена.
     
    echo off | current.exe
    стирает буфер обмена
     
    type my.txt | current.exe /2/65536
    обрезает в конце 2 символа (перенос строки это два символа) и задает новый размер буфера в байтах, по умолчанию 1 мб.
    если поток превысит размер буфера то в него ничего не запишется. сам не заметил в какой момент так стало работать и почему.
     
    type my.txt | current.exe /2
    так только обрезает
     
    чтоб сменить кодировку
    chcp 1251
    dir | current.exe
     
    как делать это автоматом не разобрался еще

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:48 03-09-2010 | Исправлено: bomzzz, 15:01 03-09-2010
    PulsSe

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите, хочу сменить букву флешки через батник  
     
    WMIC Path Win32_Volume Where Label="Имя_Флэшки" Set DriveLetter=R:
     
    что то не получается, выдает такую штуку
     
    ОШИБКА:  
     
    Код = 0х80041002
    Описание = Не найден
    Услуга = WMI  
     
    в чем дело кто нибудь знает

    Всего записей: 28 | Зарегистр. 31-08-2010 | Отправлено: 14:54 03-09-2010 | Исправлено: PulsSe, 14:54 03-09-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