Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 8

Автор: king_stiven
Дата сообщения: 02.09.2010 14:16
Можно ли вторым батником менять title первого батника?
Автор: Joo1z
Дата сообщения: 02.09.2010 14:16
Maximus777
При совпадении %key% и %vol1% значение переменной %%i будет равно value1.
В чем проблема?
Автор: Maximus777
Дата сообщения: 02.09.2010 14:23
Joo1z
в том, что value3 даст такое же совпадение.
Автор: wolf0425
Дата сообщения: 02.09.2010 14:24
Joo1z
Цитата:
В чем проблема?
в одноименных ключах vol1 в разных секциях инишника.
а он хочет значение из конкретной.

Добавлено:
Maximus777 не халявь, делай нормальный разбор с запоминанием имени секции.
Ну или sed'ом секцию вырежи перед поиском. или вместо поиска.
Автор: Maximus777
Дата сообщения: 02.09.2010 14:33
wolf0425
ну ... вобщем ... хотелось схалявить
Было бы просто замечательно, если можно при нахождении имени раздела, вытянуть следующую строку. А там бы я уже разобрался.
Автор: wolf0425
Дата сообщения: 02.09.2010 14:35
наверно так:

Код: for /f %%a in (' sed -r -n "/^\[razdel: name1\]/,/^\[.*\]/ s/^vol1=(.*)/\1/p" ^<file.ini ') do echo set name1_vol1=%%a
Автор: Joo1z
Дата сообщения: 02.09.2010 14:38

Цитата:
в том, что value3 даст такое же совпадение.

Да... промограл. SED в помощь.
Автор: Maximus777
Дата сообщения: 02.09.2010 14:41
Вот с sed'ом трабл, надо без оного, только встроенными средствами. Можно как-нить сделать так?

Код: for /F "usebackq delims=" %%i in (`Find /I "%name_razdel%=" %FileToRead%`) do set Value=%FileToRead%[строка(%%i)+1]
Автор: wolf0425
Дата сообщения: 02.09.2010 15:25

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

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


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


Автор: bomzzz
Дата сообщения: 02.09.2010 19:00
Free_Soft
знаю как делать, оказывается консольный ввод и вывод в винде устроен таким образом
type my.txt | clip.exe
когда батник доходит до выполнения этой команды, команда type сначала начинает распечатывать файл в буфер консоли пока он не закончится 4 кб, когда он закончится или закончится поток, выполняется вторая половинка команды - запускается программа клип.екзе, которая считывает 4 кб, после чего следующая порцайка ну и тд
вот только не понятно как сразу получить полный размер. придется возится с ресайзом выделеной памяти, в которую копируется весь поток и потом просто указатель буфера обмена на него переводится

Добавлено:
ну то есть можно хоть 100 мб так скопировать, только бы оперативки хватило

Добавлено:
а сам клип.екзе написан на Visual Studio 2010, видимо не самый оптимальный язык, но и написана полная обработка ошибок, то есть практически после каждого более или менее важного оператора стоит обработка возможных ошибок, из за такой параноилной корректности так и радулась программа до 25 кб, хотя большинство этих ошибок так или иначе выдала бы система
Автор: Free_Soft
Дата сообщения: 02.09.2010 20:22
bomzzz
Да я уже твою 2-килобайтную использую))) мне нужно то - строка текста и все
Автор: bomzzz
Дата сообщения: 02.09.2010 20:27
завтра может доделаю - я еще с изменением размера выделенной памяти не делал ничего. а щас тут с видеоадаптером замыкаю

Добавлено:
просто не понятно как делать - выделить 10 мб а потом обрезать или по 4 кб добавлять - надо больше почитать про память чтоб стало понятно чем такое кончится
Автор: king_stiven
Дата сообщения: 02.09.2010 23:12
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
А если убрать из скрипта двойную кавычку экранированную знаком \ , то работает, но двойные кавычки не убираются. Не пойму, чем экранировать двойную кавычку .
Автор: Mark_Titov
Дата сообщения: 03.09.2010 00:36
Доброй ночи всем.

Помогите пож-ста в решении проблемы, я не знаю как это реализовать...
Есть батники которые делают разные отчеты в htm и логи в txt и есть батник в котором прописанны параметры отправки по почте этих отчетов,
и те и этот скомпилированны в exe-шники и прикрученны как сервисы для того что бы можно было выборочно включать и выключать те или иные
отчеты по мере надобности. Так вот, тот бвтник в котором прописанны параметры отправки по почте этих отчетов, он у меня как почтовый сервис.
Его смысл заключается в том что бы при отключенном почтовом сервисе уведомления по почте не приходили, но логи писались бы.
Информация в логах и почтовых уведомлениях разная, и логи ни при каких обстоятельствах отключать нельзя...
Так вот, суть проблемы заключается в том что при отключении почтового сервиса уведомления все равно приходят, так как те сервисы которые
создают отчеты в htm и логи в txt обращаются не посредственно к ФАЙЛУ почтового сервиса, который лежит на диске С, и им всеравно отключен ли
этот сервис или нет.
На данный момент в том батнике (скомпилированном в exe) который делает отчеты в htm и логи в txt прописанно -

Call c:\Mail.exe

Дальше этот "Mail.exe" рассылает почтовые уведомления адресатам...
Вопрос, можно ли реализовать батник который делает разные отчеты в htm и логи в txt таким образом что бы он обращался не посредственно к почтовому сервису, и если этот сервис запущен, то что бы он ТОЛЬКО ТОГДА направлял команду на Call c:\Mail.exe...?
И если такой вариант возможен, то приведите пож-ста хотя бы пример кода который нужно прописать в место "Call c:\Mail.exe"...

Заранее благодарю, надеюсь на ответ...
Автор: bomzzz
Дата сообщения: 03.09.2010 03:42
Free_Soft
CURRENT.EXE
до 1 мб копирует. увеличить чета не получилось, обрезать удалось, от перекодировки отказался - неправильно перекодирует русский текст, кодировку надо самому в батнике менять на 1251. потом еще поковыряюсь может лучше получится.
echo off и просто запуск она отличает

Добавлено:
а в микрософтовском клипе скорее всего ошибка. когда делал у меня тоже так получилось как у них - ошибки не выдает, а копирует до 4174X2. сам не понял почему но исправил

Добавлено:
наверно консоль так работает что количество символов не всегда до полного размера буфера типа такого...
Автор: 01MDM
Дата сообщения: 03.09.2010 06:12
Mark_Titov,
теоретически:

Код:
tasklist | 1>nul findstr mail.exe && call c:\mail.exe
Автор: Free_Soft
Дата сообщения: 03.09.2010 07:20
bomzzz
последняя версия ставит знак переноса строки в конце
Автор: Mark_Titov
Дата сообщения: 03.09.2010 07:54
01MDM, спасибо, верно, можно и так, чего-то я не подумал о этом.
Исходя из этого можно же и проверку статуса самого сервиса сделать?
Ну типа проверки запущен или нет сам сервис, если запущен, то Call c:\Mail.exe, если нет то goto begin...
Я думаю что это надежнее будет?
Можешь подсказать как это можно сделать?
Автор: wolf0425
Дата сообщения: 03.09.2010 08:19
king_stiven
Цитата:
А если убрать из скрипта двойную кавычку экранированную знаком \ , то работает, но двойные кавычки не убираются. Не пойму, чем экранировать двойную кавычку .
хексом её подставь, \x22



Добавлено:
Mark_Titov

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

а проверить состояние вервиса через sc перед вызовом - чем-то не устраивает?

И если рассылкой занимается сервис - как получилось что его ещё и вызывать надо, а не он сам находит отсылаемые данные в каком-то списке?
Автор: Mark_Titov
Дата сообщения: 03.09.2010 08:37
wolf0425

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

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

Добавлено:

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

Я про то и говорю, просто с sc не справлюсь сам...
Автор: wolf0425
Дата сообщения: 03.09.2010 08:42
Mark_Titov
Цитата:
просто с sc не справлюсь сам...
ну это же вроде для тебя писали показывалку/отключалку сервисов. ты до сих пор не разобрался как она работает???


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

Добавлено:

Цитата:
В нем прописанны ТОЛЬКО почтовые параметры и список рассылки, и все,
тогда в чем смысл того, что он прописан в системе как сервис?
никаких сервисных функций ты на него не навесил.
Автор: Mark_Titov
Дата сообщения: 03.09.2010 08:50
wolf0425, спасибо...

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

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

Добавлено:
А где его имя вписать в этой строке, что бы он не все сервисы проверял, а только его...?
Автор: wolf0425
Дата сообщения: 03.09.2010 09:42

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


Добавлено:

Цитата:
При остановке оного, письма не будут отсылаться, а только ЛОГИ писаться будут на винт...
да он у тебя и запущенный ничего не отсылает пока его как команду не запустят.
Автор: bomzzz
Дата сообщения: 03.09.2010 11:35
Free_Soft
она делает именно так как выдает строку батник. попробуй
echo KKKKK| MY.TXT и увидишь что это батник ставит, чтоб его не было

type my.txt|current.exe

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

Добавлено:
впрочем щас вот так попробую

Цитата:

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


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

Добавлено:
ну естественно ехо ставит перенос иначе бы текст всегда был в одну строку
Автор: Mark_Titov
Дата сообщения: 03.09.2010 12:59
wolf0425
Спасибо тебе большое, теперь все работает как надо...!

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

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

Благодарю...
Автор: bomzzz
Дата сообщения: 03.09.2010 13:48
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

как делать это автоматом не разобрался еще
Автор: PulsSe
Дата сообщения: 03.09.2010 13:54
помогите, хочу сменить букву флешки через батник

WMIC Path Win32_Volume Where Label="Имя_Флэшки" Set DriveLetter=R:

что то не получается, выдает такую штуку

ОШИБКА:

Код = 0х80041002
Описание = Не найден
Услуга = WMI

в чем дело кто нибудь знает
Автор: bomzzz
Дата сообщения: 03.09.2010 14:01
PulsSe
совсем недавно, как бы не вчера видел такую темку или вопрос в разделе     Операционные системы, про смену буквы флешки.

http://technet.microsoft.com/ru-ru/library/cc757491(WS.10).aspx

Цитата:

Использование командной строки

1. Откройте окно «Командная строка».
2. Введите:
diskpart
3. В командной строке DISKPART введите:
list volume
Запишите номер простого тома, для которого выполняется назначение, смена или удаление буквы диска.
4. В командной строке DISKPART введите:
select volumen
Выбор тома n, для которого выполняется назначение, смена или удаление буквы диска.
5. В командной строке DISKPART введите одну из следующих команд:
* assign letter=L
L — буква диска, которую требуется назначить или сменить.
* remove letter=L
L — буква диска, которую требуется удалить.
Автор: PulsSe
Дата сообщения: 03.09.2010 14:20
А можно конкретный код на батнике как это будет, и что бы батник работал прямо с флэшки.

т.е. батник запустил, буква флешки сменилась - все гуд
Автор: bomzzz
Дата сообщения: 03.09.2010 14:22
Хитрый какой

ECHO OFF
COLOR 9F
CLS
echo list volume| diskpart
pause

дальше сам делай. я не буду буквы у себя менять

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.