Как я могу получить значение ключа реестра из пакетного скрипта? - PullRequest
57 голосов
/ 15 января 2009

Мне нужно использовать команду REG QUERY, чтобы просмотреть значение ключа и установить результат в переменную с помощью этой команды:

FOR /F "tokens=2* delims=    " %%A IN ('REG QUERY "KeyName" /v ValueName') DO SET Variable=%%B

Но если ключ не существует, я получаю сообщение об ошибке в консоли. Мне нужно скрыть эту ошибку! Я попытался поставить 2> nul после команды, чтобы остановить stderr, но это работает, если я только вызываю команду:

REG QUERY "KeyName" /v ValueName 2>nul

Если я введу это в команду FOR следующим образом:

FOR /F "tokens=2* delims=    " %%A IN ('REG QUERY "KeyName" /v ValueName') DO SET Variable=%%B 2>nul

Ошибка отображается. Так кто-нибудь знает, как скрыть ошибку? Или, может быть, другая команда тоже увидит, существует ключ или нет?

Спасибо

PS: я использую Windows XP

Ответы [ 16 ]

0 голосов
/ 20 октября 2017
set regVar_LocalPrjPath="LocalPrjPath"
set regVar_Path="HKEY_CURRENT_USER\Software\xyz\KeyPath"

:: ### Retrieve VAR1 ###
FOR /F "skip=2 tokens=2,*" %%A IN ('reg.exe query %regVar_Path% /v %regVar_LocalPrjPath%') DO set "VAR1=%%B"
0 голосов
/ 17 декабря 2015

Вы можете получить значение раздела реестра следующим образом

@echo OFF
setlocal ENABLEEXTENSIONS
set REG_NAME="HKEY_CURRENT_USER\Software\Test"
set KEY_NAME=TestVal

FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %REG_NAME% /v %KEY_NAME% 2^>nul`) DO (
    @echo %%A : %%C
)
pause

те, кому интересно, как добавлять рег ключи, вот способ.

REGEDIT4

; @ECHO OFF
; CLS
; REGEDIT.EXE /S "%~f0"
; EXIT

[HKEY_CURRENT_USER\Software\Test]
"TestVal"="Succeeded"
0 голосов
/ 19 января 2015

Я встречал много ошибок на компьютерах с Windows XP при использовании WMIC (например, из-за поврежденных файлов на компьютерах). Поэтому лучше не использовать WMIC для Win XP в коде. Никаких проблем с WMIC на Win 7 все же.

0 голосов
/ 27 июня 2013
echo Off
setlocal ENABLEEXTENSIONS

set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup"
set VALUE_NAME=release 

REG QUERY %KEY_NAME% /S /v %VALUE_NAME%
endlocal

точка поставлена ​​\ в конце KEY_NAME

0 голосов
/ 02 мая 2012
@echo off
setlocal ENABLEEXTENSIONS
set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\awhost32.exe
set VALUE_NAME=Path
for /F "usebackq tokens=3" %%A IN (`reg query "%KEY_NAME%" /v "%VALUE_NAME%" 2^>nul ^| find "%VALUE_NAME%"`) do (
  echo %%A
)

Как вы обрабатываете пробел в переменной %% A? Это приводит к C: \ Program. Фактический путь - C: \ Program Files \ Symantec \ pcAnywhere.

0 голосов
/ 15 января 2009

Спасибо, мне просто нужно использовать:

SETLOCAL EnableExtensions

И положить:

2^>nul

В запрос REG, вызванный командой FOR. Еще раз большое спасибо! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...