4

BAT ファイルの環境変数に REG 値を読み込もうとしています。例えば、

REG HKLM\SYSTEM\CurrentControlSet\Services\Eventlog /v ImagePath

次のように、REG コマンドの出力文字列全体を環境変数に取得できます。

FOR /F "usebackq delims==" %%a in (`REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog" /v ImagePath`) DO set ImagePath=%%a

ただし、これは環境変数を行全体に設定します。つまり、

ImagePath   REG_EXPAND_SZ   C:\Windows\system32\services.exe

環境変数をパス部分のみで構成したい、つまり、

C:\Windows\system32\services.exe

ヒントをありがとう。

4

1 に答える 1

7
for /f "tokens=2*" %%A in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog" /v ImagePath') DO set ImagePath=%%B

デフォルトの区切り文字はスペースとタブです。変更する必要はありません。TOKENS=2* は、2 番目のトークンを %%A に格納し、行の残りを %%B に格納します。

元のコードに関して - あなたの状況で USEBACKQ を使用するメリットはありません。=また、区切り文字として使用したため、コードに含まれている場合、行全体が保持されません。

コメントへの回答
パスにスペースが含まれていないという事実を信頼できる場合は、単純に "TOKENS=3" を使用して %%A を保存できます。しかし、私はそれを信用しません。代わりに、私は使用します

for /f "tokens=2*" %%A in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog" /v ImagePath') DO (
  for %%F in (%%B) do (
    set ImagePath=%%F
    goto :break
  )
)
:break
于 2012-04-27T23:46:40.647 に答える