web-dev-qa-db-ja.com

CLI(または.batファイル)からのパスにスペースが含まれるレジストリキーを検出しますか?

私の経験(そしてグーグルフー)が私を失望させたという問題に遭遇しました。

基本的に、私は数百人のクライアントに KB9687 をプッシュする必要があります。当然、インストールを開始する前に、修正プログラムのインストールを確認したいと思います。残念ながら、SCCMのような適切なシステムではなく、スクリプトとGPOを使用してこれを行う必要があります。通常は問題が発生することはありませんが、問題があるようです。

問題は、この修正プログラムがインストールするレジストリキーへのパスに、大量のスペースが含まれていることです。具体的には、_HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730_にインストールされます。

当然のことながら、標準のバッチファイル/ CMDコマンド_reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730_は構文エラーをスローし、バッチファイルのインストールチェック部分を台無しにします。パスの2番目の部分が2番目の引数として表示されます。それで、もちろん、私はパスを二重引用符で囲んでみましたが、喜びはありませんでした。一重引用符、喜びはありません。オペレーティングシステムやMicrosoftを脅迫しても、結果は得られませんでした。

いくつかのグーグルと罵倒の後で、私はこれに対する解決策のように見えるものを見つけましたが、何らかの理由で私が理解できないため、それを完全に機能させることができません。 (間違いなく、最近のコーディングスキルは弱く、文字列のトークン化により、最高のときにループが発生しました。)

私が使いたいものは次のようなもののようです:

for /f "Tokens=2,*" %%a in (‘reg.exe "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path’) do (set xpath=%%a)そして_%xpath%_で動作しますが、それは動作していません。トークンを1に設定すると、スペースの前のパスが得られ、2に設定すると、スペースの後のパスが得られ、一方の値をもう一方の値に追加する方法がわかりません。私が見たすべての答えが「ありがとう、それはうまくいった!!!」と言ったので、特にイライラします。または類似。 *(コマンドラインで直接実行する場合は、_%_を1つ削除することに注意してください。)

私がここで何を台無しにしているのか誰か知っていますか?

あるいは、誰かがまだVBSを使用していて、それを使用する方法を知っている場合は、喜んでそのオプションにジャンプします。 (ただし、XPクライアントにインストールされていないため、PowerShellはありません。)

PS、これがStackOverflowに適している場合は、移行に問題はありませんが、最初の考えでは、開発者がここに来て、開発者の設定について簡単な質問をすることは「私たち」には感謝しません。マシンなので、おそらく私の質問についても同じように感じるだろうと思いました。

3
HopelessN00b

スペースを含むレジストリパスでは、二重引用符で問題なく機能するようです。ここでWindows XP SP3でテストしました。以下は、期待されるキー/値を返します。

REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"

トークンを使用する場合は、delimsオプションを使用してnotを指定し、スペース/タブを区切り文字として使用する必要があります。 。 FOR /?から:

   delims=xxx      - specifies a delimiter set.  This replaces the
                     default delimiter set of space and tab.

;を区切り文字として使用する簡単なバッチの例。

FOR /F "usebackq delims=;" %%A IN (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path`) DO (
    SET XPATH=%%A
)

さらに、 wmic ユーティリティが役立つ場合があります。 XPが付属しており、WMIを使用してそれを実行します。次のような方法でKBのクイックチェックを実行できます。

wmic qfe list brief | FIND /I "KB968730"
5
jscott