Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вытащить значение из реестра и вставить его в переменную (http://forum.oszone.net/showthread.php?t=228850)

root221 26-02-2012 21:37 1867214

Вытащить значение из реестра и вставить его в переменную
 
Здравствуйте,

Задача такая

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

Petya V4sechkin 26-02-2012 21:50 1867226

Код:

@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 1867244

Petya V4sechkin,
спасибо то что нужно.

root221 27-02-2012 04:03 1867372

а как сделать проверку, есть ли в этой ветке ключа shell нету, тогда ставим паузу, а если ключ существует тогда выводим в консоль значение присвоенное этому ключу %shell%

Iska 27-02-2012 07:45 1867411

Например, просто проверяя после запроса существование результирующей переменной окружения посредством «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 1867417

Iska,

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

root221 27-02-2012 08:18 1867426

ППЦ, Что за фигня....
Код:

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 1867432

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

Что-то недавно было на эту тему. Попробуйте посмотреть здесь: CMD/BAT - [решено] При конверте .bat в .exe не работают переменные.

root221 27-02-2012 08:57 1867445

в общем пришлось сделать вот так %systemroot%\temp и всё заработало.

Andrey_Vladimirovich 15-07-2021 10:36 2962177

Цитата:

Цитата Petya V4sechkin
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 2962220

примерно так
Цитата:

Цитата Andrey_Vladimirovich
... In ('"Вместо Reg.exe с пробелами" ключи "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" ключи ') Do ...»


Andrey_Vladimirovich 15-07-2021 15:34 2962225

Цитата:

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

alpap, имеете в виду, просто заключить полный путь файла в двойные кавычки? Если да, то так я конечно пробовал, получаю ошибку: "Системе не удается найти указанный путь.". Так \"Reg\" пробовал и так ^"Reg^". Второй вариант работает только без "For".

alpap 15-07-2021 19:21 2962243

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

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

или
Код:

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


iglezz 15-07-2021 19:23 2962244

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 2962245

Цитата:

Цитата alpap
а я где-то упоминал про обратный слеш или циркумфлекс? »

Честно говоря, не понял о чем вы?

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 3025768

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

NickM 26-03-2024 12:10 3025769

Цитата:

Цитата Stealch
Как быть если »

Описать внятно то, что Вы хотите получить - указать полный путь к ключу и что хотите с этим ключом сделать.

UPD:
Цитата:

Цитата Stealch
Inno Setup: App Path »

Если учесть, что в параметре добавилось 3 пробела, то в вышеуказанном коде достаточно заменить:
Цитата:

Цитата Andrey_Vladimirovich
Код:

Tokens=2*
»

на
Код:

Tokens=5*


Время: 11:50.

Время: 11:50.
© OSzone.net 2001-