web-dev-qa-db-ja.com

ワイルドカードを使用してレジストリキーを削除する

いくつかのvbscriptを作成するのではなく、バッチファイルを使用してワイルドカードに基づいてレジストリキーを削除する方法を見つけたいと思っています。誰か例がありますか?

ここで説明するように、MSによるOfficeの手動による削除を続行する必要があります。

http://support.Microsoft.com/kb/928218

私が削除しようとしているものの例は次のとおりです:

HKEY_CLASSES_ROOT\Installer\Products\*F01FEC HKEY_CLASSES_ROOT\Installer\UpgradeCodes\*F01FEC HKEY_CLASSES_ROOT\Installer\Win32Assemblies\*Office12*

Regクエリが値を変数にスローし、forループでヒットする可能性はありますか?

FOR %%i IN (%PATH1% %PATH2% %PATH3%) DO (   
    reg delete %PATH1% /f
)
6
netadmin_dude

私は故障し、レジストリのクリーンアップ用のvbscriptを作成しましたが、これは機能しているようです...

On Error Resume Next
const HKEY_LOCAL_MACHINE = &H80000002
const HKEY_CLASSES_ROOT = &H80000000
const HKEY_CURRENT_USER = &H80000001
strComputer = "."

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
strComputer & "\root\default:StdRegProv")

strKeyPath = "Software\Microsoft\Office\12.0"
DeleteSubkeys HKEY_CURRENT_USER, strKeyPath

strKeyPath = "Software\Microsoft\Office\12.0"
DeleteSubkeys HKEY_LOCAL_MACHINE, strKeyPath

strKeyPath = "SYSTEM\CurrentControlSet\Services\ose"
Deletesubkeys HKEY_LOCAL_MACHINE, strKeyPath

strKeyPath = "SOFTWARE\Microsoft\Office\Delivery\SourceEngine\Downloads"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    If Not InStr(subkey, "0FF1CE}-") = 0 Then
        'WScript.Echo subkey
    Deletesubkeys HKEY_LOCAL_MACHINE, strKeyPath & "\" & subkey
    End If
Next

strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    If Not InStr(subkey, "0FF1CE") = 0 Then
        'WScript.Echo subkey
    Deletesubkeys HKEY_LOCAL_MACHINE, strKeyPath & "\" & subkey
    End If
Next

strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
    If Not InStr(subkey, "F01FEC") = 0 Then
        'WScript.Echo subkey
    Deletesubkeys HKEY_LOCAL_MACHINE, strKeyPath & "\" & subkey
    End If
Next

strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    If Not InStr(subkey, "F01FEC") = 0 Then
        'WScript.Echo subkey
    Deletesubkeys HKEY_LOCAL_MACHINE, strKeyPath & "\" & subkey
    End If
Next

strKeyPath = "Installer\Features"
oReg.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    If Not InStr(subkey, "F01FEC") = 0 Then
        'WScript.Echo subkey
    Deletesubkeys HKEY_CLASSES_ROOT, strKeyPath & "\" & subkey
    End If
Next

strKeyPath = "Installer\Products"
oReg.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    If Not InStr(subkey, "F01FEC") = 0 Then
        'WScript.Echo subkey
    Deletesubkeys HKEY_CLASSES_ROOT, strKeyPath & "\" & subkey
    End If
Next

strKeyPath = "Installer\UpgradeCodes"
oReg.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    If Not InStr(subkey, "F01FEC") = 0 Then
        'WScript.Echo subkey
    Deletesubkeys HKEY_CLASSES_ROOT, strKeyPath & "\" & subkey
    End If
Next

strKeyPath = "Installer\Win32Assemblies"
oReg.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    If Not InStr(subkey, "Office12") = 0 Then
        'WScript.Echo subkey
    Deletesubkeys HKEY_CLASSES_ROOT, strKeyPath & "\" & subkey
    End If
Next

Sub DeleteSubkeys(reghive, KeyPath) 
    Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
strComputer & "\root\default:StdRegProv")
    objReg.EnumKey reghive, KeyPath, arrrSubkeys 

    If IsArray(arrrSubkeys) Then 
        For Each strrSubkey In arrrSubkeys 
            DeleteSubkeys reghive, KeyPath & "\" & strrSubkey 
        Next 
    End If 

    objReg.DeleteKey reghive, KeyPath 
End Sub
4
netadmin_dude

REGEDITを使用してから、FINDを使用してリスト全体を検索する(または、GNU Win32のgrepを取得し、正規表現を使用して検索する)と思います。レジストリを削除するリスクが少しありますGUIDのフラグメントはグローバルに一意ではないため、Officeに「属さない」キー!

@echo off
set TEMPFILE=%TEMP%\%RANDOM%.REG
set TODELETE=%TEMP%\%RANDOM%.REG

regedit /e "%TEMPFILE%" HKEY_CLASSES_ROOT\Installer

find "HKEY_CLASSES_ROOT\Installer\Products" "%TEMPFILE%" | find "C]" > "%TODELETE%"
find "HKEY_CLASSES_ROOT\Installer\UpgradeCodes" "%TEMPFILE%" | find "C]" >> "%TODELETE%"
find "HKEY_CLASSES_ROOT\Installer\Win32Assemblies" "%TEMPFILE%" | find "C]" >> "%TODELETE%"

for /f "delims=[]" %%i in (%TODELETE%) do reg delete /f "%%i"

del "%TEMPFILE%"
del "%TODELETE%"
:end
3
Evan Anderson