2013-07-16 33 views
0

我想搜索的這些註冊表項(可能帶有 「REG查詢」)一批REG查詢uninstallstring

HKLM \ SOFTWARE \微軟\的Windows \ CurrentVersion \卸載

HKLM \ SOFTWARE \ Wow6432Node \微軟\的Windows \ CurrentVersion \卸載

和 「查找」 或 「FINDSTR」 特定變量並顯示結果(回聲?)

這個腳本有點不我想實現*什麼 *

@ECHO OFF 
:: Windows 7 only 
IF NOT "%OS%"=="Windows_NT" GOTO Syntax 
VER | FINDSTR /R /E /C:" 6\.[01]\.[0-9\.]*\]" >NUL || GOTO Syntax 

:: Check command line arguments 
IF  "%~1"=="" GOTO Syntax 
IF NOT "%~2"=="" GOTO Syntax 
ECHO "%~1" | FINDSTR /R /C:"[/?]" >NUL && GOTO Syntax 

SETLOCAL ENABLEDELAYEDEXPANSION 
SET Count=0 
FOR /F "tokens=*" %%A IN ('REG Query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /F "%~1" /D /S 2^>NUL ^| FINDSTR /R /B /C:"HKEY_"') DO (
    REG Query "%%~A" /F DisplayName /V /E | FINDSTR /R /I /C:" DisplayName .* .*%~1" >NUL 2>&1 
    IF NOT ERRORLEVEL 1 (
     SET /A Count += 1 
     FOR /F "tokens=2*" %%B IN ('REG Query "%%~A" /F DisplayName /V /E 2^>NUL ^| FIND /I " DisplayName "')  DO ECHO Program Name  = %%C 
     FOR /F "tokens=2*" %%B IN ('REG Query "%%~A" /F DisplayVersion /V /E 2^>NUL ^| FIND /I " DisplayVersion "') DO ECHO Program Version = %%C 
     FOR /F "tokens=2*" %%B IN ('REG Query "%%~A" /F InstallDate /V /E 2^>NUL ^| FIND /I " InstallDate "')  DO (
      SET InstallDate=%%C 
      ECHO Install Date  = !InstallDate:~0,4!-!InstallDate:~4,2!-!InstallDate:~6! 
     ) 
     FOR /F "tokens=7 delims=\" %%B IN ("%%~A") DO ECHO Unique Identifier = %%B 
     FOR /F "tokens=2*" %%B IN ('REG Query "%%~A" /F UninstallString /V /E ^| FIND /I " UninstallString "') DO ECHO Uninstall String = %%C 
     ECHO. 
    ) 
) 

WMIC.EXE Path Win32_Processor Get DataWidth 2>NUL | FIND "64" >NUL 
IF ERRORLEVEL 1 (
    ECHO. 
    ECHO %Count% programs found 
) ELSE (
    SET Count32bit=0 
    FOR /F "tokens=*" %%A IN ('REG Query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /F "%~1" /D /S 2^>NUL ^| FINDSTR /R /B /C:"HKEY_"') DO (
     REG Query "%%~A" /F DisplayName /V /E | FINDSTR /R /I /C:" DisplayName .* .*%~1" >NUL 2>&1 
     IF NOT ERRORLEVEL 1 (
      SET /A Count32bit += 1 
      FOR /F "tokens=2*" %%B IN ('REG Query "%%~A" /F DisplayName /V /E 2^>NUL ^| FIND /I " DisplayName "')  DO ECHO Program Name  = %%C 
      FOR /F "tokens=2*" %%B IN ('REG Query "%%~A" /F DisplayVersion /V /E 2^>NUL ^| FIND /I " DisplayVersion "') DO ECHO Program Version = %%C 
      FOR /F "tokens=2*" %%B IN ('REG Query "%%~A" /F InstallDate /V /E 2^>NUL ^| FIND /I " InstallDate "')  DO (
       SET InstallDate=%%C 
       ECHO Install Date  = !InstallDate:~0,4!-!InstallDate:~4,2!-!InstallDate:~6! 
      ) 
      FOR /F "tokens=7 delims=\" %%B IN ("%%~A") DO ECHO Unique Identifier = %%B 
      FOR /F "tokens=2*" %%B IN ('REG Query "%%~A" /F UninstallString /V /E ^| FIND /I " UninstallString "') DO ECHO Uninstall String = %%C 
      ECHO. 
     ) 
    ) 
    ECHO. 
    ECHO  %Count% 64-bit programs and !Count32bit! 32-bit programs found 
) 

ENDLOCAL 
GOTO:EOF 


:Syntax 
ECHO. 
ECHO GetUninstall.bat, Version 2.00 for Windows Vista and later 
ECHO List or search uninstall command lines 
ECHO. 
ECHO Usage: GETUNINSTALL.BAT "filter" 
ECHO. 
ECHO Where: "filter" narrows down the search result to programs whose 
ECHO      uninstall data contains the string "filter" 
ECHO. 
ECHO Example: GETUNINSTALL.BAT "Adobe Reader" 
ECHO. 
ECHO Written by Rob van der Woude 
ECHO http://www.robvanderwoude.com 

:: Set return code for Windows NT 4 or later 
IF "%OS%"=="Windows_NT" COLOR 00 

問題:

它確實顯示所有發現uninstallstrings與 「%1」 表示,以「適用於Windows 7 PRO SP1" ,而不是用‘的Windows XP專業版SP3’,我似乎無法得到這個在XP工作...

REM IF NOT "%OS%"=="Windows_NT" GOTO Syntax 
REM VER | FINDSTR /R /E /C:" 6\.[01]\.[0-9\.]*\]" >NUL || GOTO Syntax 

/\,它不是那麼容易,當然;-p/\

回答

0

你爲什麼要這樣對自己?您在VBScript代碼:

Set re = New RegExp 
re.Pattern = "(\d{4})(\d{2})(\d{2})" 

Set wmi = GetObject("winmgmts://./root/cimv2") 
For Each p In wmi.ExecQuery("SELECT * FROM Win32_Product") 
    WScript.Echo "Program Name  = " & p.Name & vbNewLine _ 
    & "Program Version = " & p.Version & vbNewLine _ 
    & "Install Date  = " & re.Replace(p.InstallDate, "$1-$2-$3") & vbNewLine _ 
    & "Unique Identifier = " & p.IdentifyingNumber 
Next 

您的代碼在PowerShell中:

gwmi Win32_Product | select Name, Version, InstallDate, IdentifyingNumber | % { 
    "Program Name  = " + $_.Name 
    "Program Version = " + $_.Version 
    "Install Date  = " + ($_.InstallDate -replace '(\d{4})(\d{2})(\d{2})', 
                '$1-$2-$3') 
    "Unique Identifier = " + $_.IdentifyingNumber 
} 

提取卸載字符串將需要再努力一點,但是你需要什麼,對呢?如果您想卸載程序:WMI類提供了一個Uninstall方法。

+0

即wmic產品,其中「名稱像'Java 7 %%'」調用卸載/ nointeractive ???這就是你的意思?但是這會強制重新啓動一些卸載程序,這不是我想要的。或者是否有辦法抑制這種情況的發生? – APOC

+0

它應該類似於'wmic'電話,是的。至於強制重啓,這取決於程序。但是,您可以始終使用GUID('IdentifyingNumber')構造自定義的卸載字符串。 –

+0

當我在最後一個wmic之後添加shutdown/a時,我沒有重新啓動,不確定它是否是最好的方式,但它會拉動「竅門」 – APOC

1

這幾乎不會如期望的那樣

@ECHO OFF 
SETLOCAL ENABLEEXTENSIONS 
REM SETLOCAL ENABLEDELAYEDEXPANSION 
CLS 
echo.Tim: uninstall (old/previous) Adobe ShockWave/Flash... 

CALL "\\dc01.lksvdd.local\netlogon\Log_management.bat" >nul 2>&1 

:: RUN_Once 
IF NOT EXIST "%systemroot%\LOGS\LKSVDD\Tim\uninstall_(shockwave)flash_12+11.txt" (GOTO Uninstall_Adobe-Addons) ELSE GOTO:EOF 
GOTO:EXIT 


:Uninstall_Adobe-Addons 
rem uninstall old adobe shockwave/flash installations; new adobe shockwave/flash setup pushed with GPO... 

wmic product where "name like 'Adobe Flash Player 11%%'" call uninstall /nointeractive  > "%systemroot%\LOGS\LKSVDD\Tim\uninstall_(shockwave)flash_12+11.txt" 2>&1 
wmic product where "name like 'Adobe Flash Player 10%%'" call uninstall /nointeractive   > "%systemroot%\LOGS\LKSVDD\Tim\uninstall_(shockwave)flash_12+11.txt" 2>&1 
wmic product where "name like 'Adobe Shockwave Player 12%%'" call uninstall /nointeractive >> "%systemroot%\LOGS\LKSVDD\Tim\uninstall_(shockwave)flash_12+11.txt" 2>&1 
wmic product where "name like 'Adobe Shockwave Player 11%%'" call uninstall /nointeractive  >> "%systemroot%\LOGS\LKSVDD\Tim\uninstall_(shockwave)flash_12+11.txt" 2>&1 

rem Abort possible ShutDown.................. 
"%windir%\system32\shutdown.exe" /a >nul 2>&1 


:EXIT 
ECHO #runTimeStamp -4- "uninstall_adobe-addons.cmd" [%DATE% %TIME%] EOF >> "%systemroot%\LOGS\LKSVDD\Tim\uninstall_(shockwave)flash_12+11.txt" 2>&1 

rem echo. 
REM script date: 16-07-2013 
rem echo. 
rem PAUSE 
ENDLOCAL 
GOTO:EOF 

「的Adobe Flash Player」 沒有得到卸載/刪除,但 「的Adobe Flash Player」 不??? 這是正確的程序描述,但由於某種原因沒有得到認可,不知道爲什麼?

+0

WMIC似乎只適用於通過適當的MSI程序包安裝的程序?我仍然得到很多:,,沒有可用的實例''> :( – APOC