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

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

Автор: mugil_cephalus
Дата сообщения: 19.01.2010 13:08
Kirillhome
wolf0425
то ли плохо я прочитал мануал, то ли не знаю, но, find может так же , как и findstr искать ?? :
Для поиска слова "hello" или "there" в файле x.y введите следующую каманду:

findstr "hello there" x.y

мне нужно найти - findstr /i /n "HKEY_LOCAL_MACHINE\hardware VideoBiosDate", то есть или - HKEY_LOCAL_MACHINE\hardware или - VideoBiosDate
Автор: GlebisZ
Дата сообщения: 19.01.2010 13:18
Ребята, спасайте. Нужно ежедневно отправлять бух итоги по почте. Юзвери делать это вручную через Outlook Exp и MS Outlook (даже по Отправить-адресат) не хотят и сваливают на меня. мне нужно сделать "картинку на экране", при нажатии на который появляется почтовый клиент по умолчанию с уже введённым адресатом, темой и прикреплённым отчётом. Что бы пользователю нужно было только изменить дату отчёта в теме и нажать кнопку отправить. Перерыскал весь инет и руборд, перепробывал следующие реализации:
1) бланк Out Exp не подходит - файл должен быть разный каждый раз последней версии.
2) ярлык mailto:mail@mail.ru?atach=C:\filetosent.zip&subject=19.01.2010 - никак не поддерживает mapi функцию attach.
3) параметры запуска MS Outlook
"...Outlook.exe" /m mail@mail.ru /a "C:\filetosent.zip"
совместно не работает, либо указывать аттач, либо адресата. Как указать тему вообще в хелпе не нашёл.
4) сторонние утилиты posti и т.д. крайне не желательны. Сторонние почтовые программы (как the Bat!) вообще запрещенны. Exchenge сервера нет и не будет в помине.
5) все найденные реализации на vbs просто автоматом отправляют письма, и "не видно что точно отправилось".
6) нашёл исходники для VB на SimpleMAPI и MAPI,
_http://nrd.pnpi.spb.ru/UseSoft/Journals/Soft&Script/ssm069/comprice-mail.html
но в программировании я не силён.

Вот направили меня сюда. До того как я полностью допру до понимания MAPI, VB и VBS, я отправлю не одну сотню отчётов и ни разу не свалю домой пораньше.
Автор: wolf0425
Дата сообщения: 19.01.2010 13:24

Цитата:
то есть или - HKEY_LOCAL_MACHINE\hardware или - VideoBiosDate

а, ну значит мы тормозим на пару.
Ну еще можно использовать sed вместо find
Код: for /f "tokens=*" %%i in ('reg query "hklm\hardware" /s ^|sed -r -n "s/^.*HKEY_LOCAL_MACHINE\\hardware|VideoBiosDate.*$/\0/gpi"') do @echo "%%i"
Автор: Kirillhome
Дата сообщения: 19.01.2010 13:42
mugil_cephalus
Во первых - посмотри добавку в моём предыдущем сообщении, во-вторых - т.к. мы уже ищем в кусте HKLM\hardware (см. reg query в твоей задаче) - то зачем дополнительно искать HKEY_LOCAL_MACHINE\hardware???
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 14:00
Kirillhome

Цитата:
Во первых - посмотри добавку в моём предыдущем сообщении,

да, спасибо,

Цитата:
во-вторых - т.к. мы уже ищем в кусте HKLM\hardware (см. reg query в твоей задаче) - то зачем дополнительно искать HKEY_LOCAL_MACHINE\hardware???

потому что:
F:\>for /f "tokens=*" %i in ('reg query "hklm\hardware" /s ^|findstr /i /n "VideoBiosDate"') do @echo "%i"
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 125.
FINDSTR: Слишком длинная строка 286.
FINDSTR: Слишком длинная строка 287.
"46: VideoBiosDate REG_SZ 04/11/02"

F:\>
а мне потом еще в этом же выводе нужно будет найти раздел для параметра "VideoBiosDate"


p.s.
пока есть идея - буду ее развивать (ошибки оставлю на потом, может этот параметр сидит не в длинном разделе и ошибки не помешают)
Автор: TarValon
Дата сообщения: 19.01.2010 14:16
Помогите пожалуйста.
Есть архив, в нем 2 файла:
- DBF
- Файл, в котором записана разная информация а так же дата, когда этот дбфник нужно обработать

стоит задача разархивировать архив, сравнить дату в файле с текущей, и если дата совпадает, обработать.
Все работает. А вот как даты сравнивать, не допру никак.

Автор: wolf0425
Дата сообщения: 19.01.2010 14:22

Цитата:
А вот как даты сравнивать, не допру никак.
курить for /? относительно %~ti
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 14:23
есть!

Код: mode con lines=6000
cd\

for /f "tokens=*" %%i in ('reg query "hklm\hardware" /s ^|findstr /i "HKEY_LOCAL_MACHINE\hardware VideoBiosDate"') do call:_1 "%%i"
goto:eof

:next1
echo _%var1%_
pause

:_1
echo %~1|find /i "HKEY_LOCAL_MACHINE\hardware" &&set "var1=%~1"
echo %~1|find /i "VideoBiosDate" &&goto:next1
goto:eof
Автор: svobodny
Дата сообщения: 19.01.2010 15:40

Цитата:
все зависит от конкретики - какие проги, как они коррелируются и какой код их запуска в батнике

Проги - Firefox Builder Optimization и Firefox 3.7 alpha 1. Запускаются просто через start. Может можно как-то хитрее запустить, но я не знаю.
Автор: wolf0425
Дата сообщения: 19.01.2010 16:00
svobodny а что - FBO так часто запускаешь, что батник нужен?
как-то так:


Код: start "" program1.exe
cmdow.exe @ /hid
start "" /wait program2.exe
taskkill.exe /f /t /im program1.exe
exit
Автор: svobodny
Дата сообщения: 19.01.2010 16:12
Запускает обе проги. После закрытия ФФ, сам батник закрывается, но вторая прога - нет.

Еще пишет следующее:

Цитата:
"cmdow.exe" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.



Добавлено:
А нет. Наврал. Вторая прога тоже закрывается.

Вопрос остался на счет надписи. И как можно скрыть батник, а то висит на виду...
Автор: wolf0425
Дата сообщения: 19.01.2010 16:22

Цитата:
Вопрос остался на счет надписи. И как можно скрыть батник, а то висит на виду...

по секрету скажу - это не два вопроса, а один.

cmdow.exe ищи в шапке раздела или в яндексе
Автор: svobodny
Дата сообщения: 19.01.2010 16:35
Все понял Но это надо ставить доп. проги и т.д. Я нашел лучший способ - Bat_To_Exe_Converter. Все равно я собирался добавить к этому батнику иконку. А в этом компиляторе есть режим скрытия.

Спасибо за помощь!
Автор: Pacho
Дата сообщения: 19.01.2010 17:10
Как проверить значение параметра в реестре и, если оно пустое, то заменить на своё?
К примеру, создаём параметр:
Код: reg add HKLM\Software\Classes\.!!! /v PerceivedType
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 17:35
Pacho

Цитата:
Если бы он имел значение, то можно было бы его прочесть:

а если "прочесть" и if error тогда то-то
Автор: Kirillhome
Дата сообщения: 19.01.2010 17:36
Pacho
А вот так вот что мешает?

Код:
set ZZZ=""
for /f "skip=2 tokens=3" %%k in ('reg query HKLM\Software\Classes\.!!! /v PerceivedType') do set ZZZ="2"
if not %zzz%=="2" echo Missing
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 17:39
Kirillhome
wolf0425
если не напутал, то тогда решение задачи походу такое:

Код: mode con lines=6000
cd\

for /f "tokens=*" %%i in ('reg query "hklm\system" /s ^|findstr /i "HKEY_LOCAL_MACHINE\system D3DOGL_70835937"') do call:_1 "%%i"
goto:eof

:next1
echo _%var1%_
rem еще одна проверка, чтобы не удалить не то
reg query %var1%|find /i "D3DOGL_70835937"|find /i "00000200" &&reg add "%var1%" /v D3DOGL_70835937 /t REG_BINARY /d 00000010 /f
pause
goto:eof

:_1
echo %~1|find /i "HKEY_LOCAL_MACHINE\system" &&set "var1=%~1"
echo %~1|find /i "D3DOGL_70835937"|find /i "00000200" &&goto:next1
goto:eof
Автор: Kirillhome
Дата сообщения: 19.01.2010 19:16
mugil_cephalus
А не так?

было:

Код:
reg query %var1%|find /i "D3DOGL_70835937"|find /i "00000200" &&reg add "%var1%" /v D3DOGL_70835937 /t REG_BINARY /d 00000010 /f
Автор: Julgo
Дата сообщения: 19.01.2010 19:32
Здравствуйте не подскажите, как прочитать первые N символов/байт из файла?
Автор: Pacho
Дата сообщения: 19.01.2010 20:41
mugil_cephalus

Цитата:
а если "прочесть" и if error тогда то-то

Ошибки никакой нет. Параметр-то существует.

Kirillhome
А как бы теперь сделать, чтобы выводилось значение параметра, а при его отсутсвии (значения) выводилось "Missing"?
Автор: Kirillhome
Дата сообщения: 19.01.2010 21:13
Pacho
А если так:

Код:
set zzy=""
for /f "skip=2 tokens=3" %%k in ('reg query HKLM\Software\Classes\.zip /v PerceivedType') do call :_1 %%k
if %zzy%=="" (
echo Missing ) else (
echo %zzy%)
goto :EOF

:_1
set zzy=%1
goto :EOF
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 21:36
Pacho
прочесть не параметр, а любое значение параметра, например, - /d 1
точнее так - reg query HKLM\Software\Classes\.!!! /v PerceivedType |find /i /v "HKEY_LOCAL_MACHINE"
Kirillhome
%var1% возвращает раздел параметра, у параметра несколько значений и если значение не то, которое нужно, то нужное значение может быть в одноименном параметре, НО уже в другом разделе - поэтому проверка нужна в цикле, а позже - поздно
Автор: Sereoga
Дата сообщения: 19.01.2010 22:06
Подскажите, пожалуйста, как в батнике запустить какую-то программу (например, TrueImage.exe), так, чтобы управление сразу вернулось в родительский батник (сразу, а не после завершиния вазванной программы)?

так:
start "%ProgramFiles%\AcronisTruImHom\TrueImage.exe"

и так:
"%ProgramFiles%\AcronisTruImHom\TrueImage.exe"

не получается - Акронис запускается, но управление в батник на возвращается пока Акронис не завершится.
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 22:07
Sereoga

Цитата:
так:
start "%ProgramFiles%\AcronisTruImHom\TrueImage.exe"

start "" "%ProgramFiles%\AcronisTruImHom\TrueImage.exe"
см. start /?

Добавлено:
Kirillhome
мне нужно получить в вывод, с которым дальше работать, - или "HKEY_LOCAL_MACHINE\hardware" или "VideoBiosDate", то есть поиск обоих значений - как это сделать find'om, а не findstr - не знаю
Автор: Kirillhome
Дата сообщения: 19.01.2010 22:53
mugil_cephalus

Цитата:
%var1% возвращает раздел параметра, у параметра несколько значений и если значение не то, которое нужно, то нужное значение может быть в одноименном параметре, НО уже в другом разделе - поэтому проверка нужна в цикле, а позже - поздно

Если честно, не очень понял.

"От печки"....
Что вижу

Код:
mode con lines=6000
cd\

for /f "tokens=*" %%i in ('reg query "hklm\system" /s ^|findstr /i "HKEY_LOCAL_MACHINE\system D3DOGL_70835937"') do call:_1 "%%i"
goto:eof

:next1
echo _%var1%_
rem еще одна проверка, чтобы не удалить не то
reg query %var1%|find /i "D3DOGL_70835937"|find /i "00000200" &&reg add "%var1%" /v D3DOGL_70835937 /t REG_BINARY /d 00000010 /f
pause
goto:eof

:_1
echo %~1|find /i "HKEY_LOCAL_MACHINE\system" &&set "var1=%~1"
echo %~1|find /i "D3DOGL_70835937"|find /i "00000200" &&goto:next1
goto:eof
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 23:27
Kirillhome
заказчик уже поменял условия задачи - мы там - http://forum.ru-board.com/topic.cgi?forum=5&topic=29819&start=1680#2

Цитата:
Код:reg query %var1% /v "D3DOGL_70835937"|find /i "00000200" &&reg add "%var1%" /v D3DOGL_70835937 /t REG_BINARY /d 00000010 /f


т.е. - удалить один FIND

да так можно, я подумал про другой find , а там
Цитата:
C:\Documents and Settings\Administrator>reg query "hklm\system" /s|find /i "D3DOGL_70835937"
D3DOGL_70835937 REG_BINARY 00000010
D3DOGL_70835937 REG_BINARY 00000200
D3DOGL_70835937 REG_BINARY 00000010

но условия уже поменялись (повторюсь)

Добавлено:
F:\Documents and Settings\admin>reg query "hklm\hardware" /v VideoBiosDate /s

Ошибка: Слишком много параметров в командной строке.

что не правильно?
судя по ntcmds - "reg query имя_раздела [{/v имя_записи|/ve}] [/s]" - /v и /s можно употреблять вместе
Автор: dima1978
Дата сообщения: 20.01.2010 02:29

Подскажите, пожалуйста, есть ли возможность экранировать символ двойной кавычки (") в батнике или командной строке? Все остальные спецсимволы экранируются как раз с помощью этих двойных кавычек.

Для примера нужно разархивировать файл с паролем, в котором присутствует символ ("):
RaR x -ad -pp"Rx0#nwU5cd sample.rar

Автор: Sereoga
Дата сообщения: 20.01.2010 03:49
mugil_cephalus
Спасибо, помогло!
Автор: Kirillhome
Дата сообщения: 20.01.2010 03:54
dima1978
В общем случае - есть спец-символ ^
Для других спец.символов (&|<>) - всё срабатывает, а вот для кавычки... Похоже - нет.


mugil_cephalus

Цитата:
F:\Documents and Settings\admin>reg query "hklm\hardware" /v VideoBiosDate /s
Ошибка: Слишком много параметров в командной строке.
что не правильно?

Ну, "опыт, сын ошибок трудных" говорит следующее:
reg query "hklm\software\classes\.zip"
выведет список ключей и их значения (текущего уровня), и все подуровни

reg query "hklm\software\classes\.zip" /s
выведет список ключей и их значения (текущего уровня), и все подуровни, с их списком ключей и значениями

reg query "hklm\software\classes\.zip" /v Perceivedtype
выведет только значение ключа

И фигурных скобочек ещё одних (в описании команды) - ой, не хватает.
Возможно - имеет смысл "стянуть" REG из Win'2003 - там следующий пример работает:

Код:
reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" /v GlobalFlag /s
Автор: dima1978
Дата сообщения: 20.01.2010 09:01

Kirillhome

Цитата:
В общем случае - есть спец-символ ^
Для других спец.символов (&|<>) - всё срабатывает, а вот для кавычки... Похоже - нет.


Да, действительно, спецсимвол (^) экранирует все остальные спецсимволы командной строки без проблем, кроме злополучных кавычек (").

Вопрос пока остается.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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