0

私がやろうとしているのは、プログラムのアンインストール リンクを返すバッチ スクリプトを作成することです。だから基本的に私はこのようなものが欲しい:

Select UninstallString from HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall where DisplayName='Sublime Text 1.0"

私は使用しています

reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /S^|find " DisplayName"

最初にプログラムのリストを取得してメニューに表示し、アンインストールするプログラムを選択すると、HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall にあるそのプログラムのレジストリに移動し、UninstallString を取得することになっています価値

4

2 に答える 2

1

これを試して:

@echo off&setlocal enabledelayedexpansion
set "regroot=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
set "file=%~dpn0.txt"

set /a fcount=0
for /f "delims==" %%i in ('set $ 2^>nul') do set "%%i="
if exist "%file%" (
    for /f "usebackqtokens=1*delims=|" %%i in ("%file%") do (
        set /a fcount+=1
        set "$d%%j=%%j"
        set "$u%%j=%%i"
    )
    goto:menu
)
echo(building "%file%", please wait
for /f "delims=" %%i in ('reg query "%regroot%"') do (
    set "DN="& set "US="
    for /f "tokens=2*" %%j in ('reg query "%regroot%\%%~ni" /v DisplayName 2^>nul^|find /i "DisplayName"') do set "DN=%%~k"
    for /f "tokens=2*" %%j in ('reg query "%regroot%\%%~ni" /v UninstallString 2^>nul^|find /i "UninstallString"') do set "US=%%~k"
    if not "!DN!"=="" if not "!US!"=="" if not defined $d!DN! (
        >>"%file%" echo(!US!^|!DN!
        set /a fcount+=1
        set "$d!DN!=!DN!"
        set "$u!DN!=!US!"
        <nul set/p"=."
    )
)
echo(
:menu
echo(%fcount% programs with uninstall strings found.
:loop
set /a pcount=0
set "program="
set /p "program=type a program name (q=quit): "
if not defined program goto:loop
if "%program%"=="q" goto:eof
echo(
for /f "tokens=2delims==" %%i in ('set $d ^|findstr !program! 2^>nul') do (
    echo(%%i
    echo(!$u%%i!
    echo(
    set /a pcount+=1
)
if %pcount% equ 0 (echo(!program! not found.) else echo(%pcount% program(s^) found.
goto:loop

findstrの REGEX 機能の一部を使用できます(/i大文字と小文字を区別しない検索など)。注意: 「M」で始まるすべてのプログラムを検索するには、"^$dM"またはを使用できます/b $dM。検索可能な文字列には、常に先頭に$d.

于 2013-04-11T23:01:53.940 に答える
0

この「ツーライナー」を試してください:

for /f "tokens=7 delims=\" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /S /F "MySoftware" ^| find "{"') do set ProgramUninstallRegKey=%%a
for /f "skip=1 tokens=3*" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%ProgramUninstallRegKey% /V "UninstallString"') do set ProgramUninstallString=%%a %%b
于 2017-03-24T10:54:28.043 に答える