バッチスクリプトを実行して見つかったキーの出力値を取得する

バッチスクリプトを実行して見つかったキーの出力値を取得する

CMD プロンプトではすべて正常に動作しますが、実行するには bat ファイルを入力する必要がありますが、Reg Query cmd の出力を取得できず、そこから別のクエリを実行することができません。

私が探しているのは App ID であり、これは変更される可能性があるため、キーの残りの部分を見つける必要があります。コマンド プロンプトで次のように入力すると、必要なものが見つかります。

REG Query HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall /F "APP_NAME" /E /S

次のような必要なキーが提供されます:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{398E49A0-84CA-43B5-A926-42EF68619E91}

そこから別のコマンドを実行してアンインストール コマンドを取得できます。

REG Query HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{398E49A0-84CA-43B5-A926-42EF68619E91} /V "UninstallString"

サイトで見たものを使用して試してみましたfor \f token....が、スキップしても最初の文字列だけが返されません。また、何らかの方法で割り当てることもできませんでした。次のようなものが必要です。

set Full_Key = reg query...
set Uninstall_CMD = Full_Key "/V Uninstallstring"

見つかったら、エントリは 1 つだけになることがわかります。

答え1

たくさんの宿題と古い本を調べた結果、これが動作するようになりました。ネットワーク上で私と同じアプリをアンインストールする必要がある場合や、開始点が必要な場合に備えて、ここにコードを投稿します。

私が解決しなければならなかった主な問題は、典型的なアンインストール ファイルがないため、App ID を見つけて、レジストリからアンインストール文字列を取得することでした。

見た目は最高のコードではないかもしれませんが、機能します。

rem First Check To See If The App Is Even Installed, In My Case, It May Not Be A Dell Box, Or We Already Uninstalled

REG Query %Computer%HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /F "Dell SupportAssist" /E /D /S > NUL
Rem If We have Error, It Is Not There, Bail Out
if errorlevel 1 exit
rem The Key Is Found, So It Must Be Installed, So Get The Full Key, By Searching For The App Name
FOR /F "tokens=*" %%A IN ('REG Query %Computer%HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /F "Dell SupportAssist" /E /D /S 2^>NUL ^| FINDSTR /R /C:"HKEY_"') DO (
rem Now We Have The Full Key From Above, Grab The Uninstall Command And Run It
FOR /F "tokens=2*" %%B IN ('REG Query "%Computer%%%~A" /F UninstallString /V /E ^| FIND /I " UninstallString "') DO %%C% /qn

)

関連情報