Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: Fannat
Дата сообщения: 21.06.2007 04:14
Elroir

Спасибо, все заработало.

А как это можно было реализовать посрадствам команды hostname? Можно было сделать перенаправление в файл, от туда считывать, сравнивать, и потом удалять его. А попроще? Просто на будущее для себя, как можно задействовать выводы команд для сравнений?
Автор: Maza Faka
Дата сообщения: 21.06.2007 06:49
Fannat

Цитата:
А попроще?

Можно присвоить вывод переменной:

Код:
@echo off
for /f "tokens=*" %%a in ('hostname') do set name=%%a
echo %name%
Автор: Fannat
Дата сообщения: 21.06.2007 08:50
Maza Faka
Спасибо.

А можно описать как она выполняется, что значит каждый параметр? Я так понял, что побуквенно считывается вывод команды и так же побуквенно присваивается новой переменной? (что означают ' ' или %%a?)

Конечно можете меня отправить читать доки, но чтобы разобраться в данном примере, придется перелистать и перечитать не один десяток страниц, а здесь можно объяснить в нескольких строчках.
Автор: RwR
Дата сообщения: 21.06.2007 11:36
Здрасьте, не подскажите как из батника вырубить службу и потом её вновь запустить?
taskkill не предлагать, если им пользоваться, то система виснет намертво, сначала необходимо вырубить службу, потом убить процесс, произвести некоторые действия, а затем эту службу вновь запустить. Я пробовал добавлять в реестр значения для этой службы командой reg add, но я надеюсь тут знают способ попроще.
Автор: Elroir
Дата сообщения: 21.06.2007 11:58
RwR

Код:
net stop название_службы
net start название_службы
Автор: Accessor
Дата сообщения: 21.06.2007 12:10
RwR
sc.exe
Автор: Maza Faka
Дата сообщения: 21.06.2007 12:29
Fannat

Цитата:
Я так понял, что побуквенно считывается вывод команды

Нет, вывод команды считывается целиком, одной строкой и присваивается переменной name.

Цитата:
что означают ' ' или %%a?)

'' означают, что разбирается вывод команды "hostname", а не файл "hostname"
%%a переменная в которой содержится строка.
Автор: RwR
Дата сообщения: 21.06.2007 12:32

Цитата:
sc.exe

Что это значит?
Автор: Elroir
Дата сообщения: 21.06.2007 12:32
Fannat

Цитата:
А можно описать как она выполняется, что значит каждый параметр? Я так понял, что побуквенно считывается вывод команды и так же побуквенно присваивается новой переменной? (что означают ' ' или %%a?)

Самым лучшим вариантом, действительно, будет почитать справку по команде for - там очень много опций и параметров.
Для данного примера:
ключ /f говорит нам о том, что мы хотим делать разбор слов (tokens) в строках текста.
"tokens=*" - брать в качестве слова всю строку (без разделителей).
%%а - переменная, которой присваивается найденное значение (в нашем случае - вся строка).
Одинарные кавычки внутри скобок - запустить команду в кавычках и делать разбор выводу этой команды.
do ... - для каждой найденной строки делать то, что написано после do.

Добавлено:
Maza Faka
Пока я писал, ты уже ответил
Автор: RwR
Дата сообщения: 21.06.2007 13:11
Ещё один вопросик, можно прочитать из реестра определённое значение? Там должен быть прописан путь к папке установки проги, а затем нужно перевести все действия командной строки в эту папку, как всё это осуществить? И ответьте пожалуйста, что такое sc.exe?
Автор: Elroir
Дата сообщения: 21.06.2007 13:19
RwR

Цитата:
И ответьте пожалуйста, что такое sc.exe?

SC is a command line program used for communicating with the
NT Service Controller and services.
Консольная утилита Windows для управления службами.
Набери в командной строке sc.exe.

Цитата:
можно прочитать из реестра определённое значение?

Командой reg query ...
Это тоже встроенная в Windows (XP,2003) консольная утилита.
Почитай справку по ней - reg query /?
Автор: RwR
Дата сообщения: 21.06.2007 13:20
Ага, с sc.exe разобрался.

Добавлено:
А как потом значение полученное reg query использовать с командой chdir?
Нужно получить значение примерно по адресу такого вида:
HKLM\SOFTWARE\Название Компании\Название Программы\CurrentVersion\Info
из значения "installdir", а затем командой chdir перейти в папку, которая будет в "installdir".
Автор: Elroir
Дата сообщения: 21.06.2007 13:52
RwR

Код:
@echo off
setlocal
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Название Компании\Название Программы\CurrentVersion\Info" /v installdir ^| find /i "installdir"') do set "instdir=%%a"
cd /d "%instdir%"
Автор: RwR
Дата сообщения: 21.06.2007 14:54

Код: @echo off
setlocal
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\eset\eset security\CurrentVe
rsion\Info" /v installdir ^| find /i "installdir"') do set "instdir=%%a"
Непредвиденное появление: %%a.
cd /d "%instdir%"
Системе не удается найти указанный путь.
Автор: KapralBel
Дата сообщения: 21.06.2007 14:59
RwR
Это не 2 строки

Код: for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\eset\eset security\CurrentVe
rsion\Info" /v installdir ^| find /i "installdir"') do set "instdir=%%a"
Автор: RwR
Дата сообщения: 21.06.2007 15:07

Код:
@echo off
setlocal
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\eset\eset security\CurrentVersion\Info" /v installdir ^| find /i "installdir"') do set "instdir=%%a"
Непредвиденное появление: %%a.
Автор: KapralBel
Дата сообщения: 21.06.2007 15:19
RwR
Ты эту строку из батник4а запускаешь? или с комм строки?

если с комм.строки то должно быть не %%а, а
Автор: RwR
Дата сообщения: 21.06.2007 16:01
KapralBel, спасибо, теперь работает. Только говорит, что не может найти указанный файл. Хотя я уверен, что эта папка существует. Как быть?
Автор: Elroir
Дата сообщения: 21.06.2007 16:39
RwR
Какое значение находится в installdir (в реестре)?
Автор: RwR
Дата сообщения: 21.06.2007 16:44
Ну например вот такое
C:\Program Files\Eset\Eset Smart Security
Может содержать и русские символы. Как быть?
Автор: Elroir
Дата сообщения: 21.06.2007 17:01
RwR
Вот так должно работать (и с русскими символами тоже):

Код:
@echo off
chcp 1251>nul
for /f "tokens=2*" %%a in ('REG QUERY "HKLM\SOFTWARE\eset\eset security\CurrentVersion\Info" /v installdir ^| find /i "installdir"') do set "instdir=%%b"
cd /d "%instdir%"
set "instdir="
Автор: RwR
Дата сообщения: 21.06.2007 17:06
Заработало!!! Спасибо всем, кто помог! Эх, люблю я этот форум!
Автор: KapralBel
Дата сообщения: 21.06.2007 17:33
Elroir
cd /d Мне никогда не нравилась (не помню в чем дело) - всегда пользовался PushD
Автор: Maza Faka
Дата сообщения: 21.06.2007 18:16
Elroir
KapralBel

Цитата:
cd /d Мне никогда не нравилась

Я тоже неоднократно замечал за ней глюкавость, особенно в циклах, так, что лучше юзать PushD.
Автор: Elroir
Дата сообщения: 21.06.2007 18:19
KapralBel
PushD тоже не срабатывает
Точнее, он работает так же как и cd /d - директория меняется, но когда батник выходит, она меняется обратно на ту которая была до запуска батника.
Я немного поэкпериментировал - если установлена setlocal, при любых изменениях директорий, при выходе из батника (или после endlocal) устанавливается предыдущая директория.
P.S С PushD вообще интересно - в стеке остается запись, но опять же - батник по окончании setlocal возвращает текущую директорию к предыдущей.
Автор: KapralBel
Дата сообщения: 21.06.2007 18:33
Elroir
Я вообще и setlocal не очень жалую (мне проще сделать через ПП)
Может быть по концу батничка автоматом отрабатывает endlocal
Автор: Fannat
Дата сообщения: 22.06.2007 04:40
Maza Faka
А что означает tokens=* ?
Автор: Elroir
Дата сообщения: 22.06.2007 05:19
Fannat
Перечитай предыдущую страницу темы.
Автор: Fannat
Дата сообщения: 22.06.2007 05:40
Сорри, не заметил сообщения..
Автор: Ugu3u
Дата сообщения: 22.06.2007 06:42
Очень прошу помочь

1. Нужен батник принудительно закрывающий все приложения и уводящий компьютер в ребут (нужен для закрытия DC хаба, через стандартную перезагрузку компьютер не уходит в ребут), nnCron тоже не может увести компьютер в ребут, помогает только Switch Off.

2. Очень нужен батник выставляющий разрешение (жестко 1680*1050) экрана при его запуске, желательно чтобы после выполнения операции батник сам закрывался.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


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