Реестр Windows Как восстановить ассоциации файлов в Windows

Переводчик Google

akok

Команда форума
Администратор
Ассоциация VN
Сообщения
27,530
Решения
30
Реакции
14,472

Скрипт PowerShell для экспорта ассоциаций​

Скрипт экспортирует прочие ассоциации файлов Windows в .reg файлы (расширения + связанные ProgID) для последующего восстановления.
Дополнительно добавляет сброс пользовательских привязок (UserChoice).

Отдельно сохраняет ключи Directory, Folder, Drive.

Файлы выгружаются в папку FileAssociations рядом со скриптом.

Во вложении — готовый пакет для запуска, используйте start.bat.

PowerShell:
# This script ONLY GENERATES .reg files. It does NOT modify the registry.
# Elevation is required because reg.exe export requires it.

$OutputDir = "$PSScriptRoot\FileAssociations"
New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null

# =========================
# File extensions
# =========================
$Extensions = @(
"AVI","BAT","BMP","CHM","CMD","COM","EXE","GIF","HTM","HTML",
"ICO","IMG","INF","JPE","JPEG","JPG","JS","LNK","MP3","MPE",
"MPEG","MPG","MSC","PS1","PS1XML","PSC1","PSD1","PSM1",
"REG","SCR","TIF","TIFF","TXT","VBS","WMA","WMV","XML","ZIP"
)

foreach ($Ext in $Extensions) {

    $DotExt = ".$Ext"
    $OutReg = Join-Path $OutputDir "$Ext.reg"

    $TmpExt  = "$env:TEMP\${Ext}_ext.reg"
    $TmpProg = "$env:TEMP\${Ext}_prog.reg"

    # Always export HKCR\.EXT
    reg export "HKCR\$DotExt" $TmpExt /y | Out-Null

    # Try to read default ProgID (may legitimately be missing)
    $ProgId = (Get-ItemProperty `
        -Path "Registry::HKEY_CLASSES_ROOT\$DotExt" `
        -ErrorAction SilentlyContinue)."(default)"

    $Header = "Windows Registry Editor Version 5.00`r`n`r`n"
    $ExtBlock = (Get-Content $TmpExt | Select-Object -Skip 1) -join "`r`n"

    $Content = $Header + $ExtBlock

    if ($ProgId) {

        # Export HKCR\<ProgID>
        reg export "HKCR\$ProgId" $TmpProg /y | Out-Null
        $ProgBlock = (Get-Content $TmpProg | Select-Object -Skip 1) -join "`r`n"

        $ResetBlock = @(
            "",
            "",
            $ProgBlock,
            "",
            "[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$DotExt\UserChoice]",
            "",
            "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$DotExt\OpenWithProgids]",
            "`"$ProgId`"=hex(0):"
        ) -join "`r`n"

        $Content += $ResetBlock
    }

    $Content | Set-Content -Encoding Unicode $OutReg

    Remove-Item $TmpExt -Force
    if (Test-Path $TmpProg) { Remove-Item $TmpProg -Force }
}

# =========================
# Shell objects (NOT extensions)
# =========================
$ShellObjects = @("Directory","Folder","Drive")

foreach ($Obj in $ShellObjects) {

    $OutReg = Join-Path $OutputDir "$Obj.reg"
    $TmpObj = "$env:TEMP\${Obj}_obj.reg"

    reg export "HKCR\$Obj" $TmpObj /y | Out-Null

    $Header   = "Windows Registry Editor Version 5.00`r`n`r`n"
    $ObjBlock = (Get-Content $TmpObj | Select-Object -Skip 1) -join "`r`n"

    ($Header + $ObjBlock) |
        Set-Content -Encoding Unicode $OutReg

    Remove-Item $TmpObj -Force
}
 

Вложения

Назад
Сверху Снизу