PDA

Показать полную графическую версию : [решено] Вытащить значение из реестра и вставить его в переменную


root221
26-02-2012, 21:37
Здравствуйте,

Задача такая

нужно вытащить значение из куста реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon а там то что вбито в параметре shell нужно вставить в переменную и выввести в консоль.

Petya V4sechkin
26-02-2012, 21:50
@Echo Off
For /F "Tokens=2*" %%I In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V Shell') Do Set Shell=%%J
Echo Значение Shell в реестре - %Shell%

root221
26-02-2012, 22:17
Petya V4sechkin,
спасибо то что нужно.

root221
27-02-2012, 04:03
а как сделать проверку, есть ли в этой ветке ключа shell нету, тогда ставим паузу, а если ключ существует тогда выводим в консоль значение присвоенное этому ключу %shell%

Iska
27-02-2012, 07:45
Например, просто проверяя после запроса существование результирующей переменной окружения посредством «if defined …»:
@echo off
setlocal enableextensions enabledelayedexpansion

set sKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
set sParameter=Shell

for /f "tokens=3" %%i in (
'2^>nul reg.exe query "%sKey%" /v "%sParameter%"^|find.exe /i "%sParameter%"'
) do set sShell=%%i

if defined sShell (
echo [%sShell%]
) else (
echo Not found parameter [%sParameter%] in [%sKey%]
)

endlocal
exit /b 0

root221
27-02-2012, 07:57
Iska,

Спасибо всё работает.

root221
27-02-2012, 08:18
ППЦ, Что за фигня....

if defined DevID (
call :start
) else (
color 0C
echo Not found parameter [ %sParameter% ] in [ %sKey% ]
)
endlocal
pause >nul
exit /b 0


Из за этой проверки не работает %~n0.vbs когда компилирую через Quick Batch File Compiler, во время вызова пишет мол файл не был наиден и действительно прописывается не имя батника а какоето рандомное.

да кстати

и из за моей тоже...

и вот она



Reg Query "%sKey%" /V "%sParameter%"
if %ErrorLevel%==0 (
call :start
) Else (
echo Not found parameter [%sParameter%] in [%sKey%]
)



если не компилировать а просто запустить, скажем так исходник моей программы через bat, тогда всё нормально...

мм думал из-за %~n0.vbs переименовал в file.vbs и тоже самое...

Iska
27-02-2012, 08:31
root221, проблема с переменной «%0» в Quick Batch File Compiler (и не только в нём) известная.

Что-то недавно было на эту тему. Попробуйте посмотреть здесь: CMD/BAT - [решено] При конверте .bat в .exe не работают переменные (http://forum.oszone.net/showthread.php?t=228238).

root221
27-02-2012, 08:57
в общем пришлось сделать вот так %systemroot%\temp и всё заработало.

Andrey_Vladimirovich
15-07-2021, 10:36
For /F "Tokens=2*" %%I In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V Shell') Do Set Shell=%%J »
Как быть, если вместо программы Reg.exe необходимо использовать программу, полный путь которой содержит пробелы?

alpap
15-07-2021, 15:03
примерно так
... In ('"Вместо Reg.exe с пробелами" ключи "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" ключи ') Do ...»

Andrey_Vladimirovich
15-07-2021, 15:34
примерно так
Цитата Andrey_Vladimirovich:
... In ('"Вместо Reg.exe с пробелами" ключи "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" ключи ') Do ...» »
alpap, имеете в виду, просто заключить полный путь файла в двойные кавычки? Если да, то так я конечно пробовал, получаю ошибку: "Системе не удается найти указанный путь.". Так \"Reg\" пробовал и так ^"Reg^". Второй вариант работает только без "For".

alpap
15-07-2021, 19:21
а я где-то упоминал про обратный слеш или циркумфлекс?
и давайте открыто.
покажите команду, которую запускаете без for в ком.строке, а еще лучше весь код с которым работаете, ну или эту проблемную часть
или используйте переход в папку с программой чтобы уйти от проблемного пути

cd /d "Путь к папке с программой"
:: код

или

pushd "Путь к папке с программой"
:: код
popd

iglezz
15-07-2021, 19:23
Andrey_Vladimirovich, For /F "Tokens=2*" %%I In ('""reg.exe" Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V Shell"') Do Set Shell=%%J

Andrey_Vladimirovich
15-07-2021, 19:37
а я где-то упоминал про обратный слеш или циркумфлекс? »
Честно говоря, не понял о чем вы?

iglezz, вы меня опередили, только писал сообщение и пришло уведомление о вашем ответе. В документации написано: "Наконец, команда FOR /F позволяет разобрать выходные данные другой команды. Для этого следует использовать в качестве параметра в скобках строку в обратных одиночных кавычках.". Если их использовать, тогда необходимо добавить usebackq.
Вот эти два варианта работают:For /F "Tokens=2*" %%I In ('"Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "Shell""') Do Set Shell=%%J
For /F "usebackq Tokens=2*" %%I In (`"Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "Shell""`) Do Set Shell=%%J

Всем спасибо за помощь.

Stealch
26-03-2024, 10:43
Как быть если искомый ключ (строковой параметр) реестра имеет имя с пробелами и двоеточием (Inno Setup: App Path)? Заключение в кавычки после /V имени параметра выдает помимо результата еще и мусор в виде REG_SZ App Path {искомое значение}

NickM
26-03-2024, 12:10
Как быть если »
Описать внятно то, что Вы хотите получить - указать полный путь к ключу и что хотите с этим ключом сделать.

UPD:
Inno Setup: App Path »
Если учесть, что в параметре добавилось 3 пробела, то в вышеуказанном коде достаточно заменить:
Tokens=2* »
на
Tokens=5*




© OSzone.net 2001-2012