web-dev-qa-db-ja.com

レジストリ値を取得してバッチで変数に設定する方法

レジストリキーの値を取得し、バッチファイルを使用して変数に格納する必要があります。

私はロジックを例示するために基本的なコマンドラインを記述しました(変数を設定する代わりにエコーを使用します):

for /f "tokens=3 delims=    " %%a in ('reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "LastUsedUsername" ^|findstr /ri "REG_SZ"') do echo=%%a

ユーザー名が画面に表示されることを期待していますが、実際には起こりません。

レジストリ値 "LastUsedUsername"は空ではなく、実際にはデータが含まれています。また、区切り文字はスペースではなくタブです。

[〜#〜]編集[〜#〜]

入力するだけで

reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "LastUsedUsername"

...戻ります:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
    LastUsedUsername    REG_SZ    Administrador

このコード

reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "LastUsedUsername" ^| findstr /ri "REG_SZ"

... 戻り値:

    LastUsedUsername    REG_SZ    Administrador

次に、forコマンドを使用すると、echoからの出力がありません。

7
John

デフォルトはスペースであり、regクエリが返すものであるため、delimsスイッチはまったく必要ありません。このforループ用のbatファイルを作成すると、私がいじっているキーでレジストリが正しいエコーが表示されます。たとえば、RGB背景色の "Red"値は55です。

for /f "tokens=3" %%a in ('reg query "HKCU\Control Panel\Colors"  /V Background  ^|findstr /ri "REG_SZ"') do echo %%a
5
DaveO

DOSコマンドの構文は正しいです。正しいレジストリキー値があるかどうかを質問します。コマンドラインにreq query ...の部分を入力して、何が返されるかを確認してください。 Win 7を実行していますが、HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogonで定義されているキーLastUsedUsernameが見つかりません

2
DaveO

承認された回答は一部の状況では正しくありません-レジストリから読み取られた値に空白文字(スペース(プログラムファイル(x86))など)が含まれている場合、値の最初の部分( 'プログラム')のみが返されます。私が解決したことは:

FOR /F "tokens=2* skip=2" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" /v "CommonFilesDir"') do echo %%b

結果はC:\Program Files\Common Files

2
Mark