WindowsのDesktopにあるショートカットのホットキー/ターゲットパス/ワーキングディレクトリをCSVファイルとして書き出すPowerShellスクリプト

WindowsのDesktopにあるショートカットのホットキー/ターゲットパス/ワーキングディレクトリをCSVファイルとして書き出すPowerShellスクリプト

PowerShellスクリプトを実行するためのバッチファイル〔ホットキーを設定する対象〕

:: sakuraclipboard.bat
:: バッチファイルをUTF-8で保存するときのバッチファイルの先頭は、【1】【2】のどちらでもよい。
:: UTF-8保存時は[BOMなし]と[改行コードCR+LF]の設定が必須である。
:: ●●●【1】
:: @echo off
:: chcp 65001 > nul
:: ●●●【2】
:: chcp 65001 > nul
:: @echo off

@echo off
chcp 65001 > nul

powershell -NoProfile -ExecutionPolicy RemoteSigned -File "%~dp0ShortcutList.ps1"

pause

WindowsのDesktopにあるショートカットのホットキー/ターゲットパス/ワーキングディレクトリをCSVファイルとして書き出すPowerShellスクリプト

# ShortcutList.ps1

$folder = "C:\Users\$env:username\Desktop"

if (!(Test-Path $folder)) {
    Write-Host "指定したフォルダが存在しません: $folder"
    pause
    exit
}

$lnkFiles = Get-ChildItem $folder -Filter *.lnk
Write-Host ".lnkファイル数:" $lnkFiles.Count

if ($lnkFiles.Count -eq 0) {
    Write-Host "ショートカットファイルが見つかりません。"
    pause
    exit
}

$results = @()
foreach ($file in $lnkFiles) {
    Write-Host "処理中:" $file.FullName
    try {
        $shell = New-Object -ComObject WScript.Shell
        $shortcut = $shell.CreateShortcut($file.FullName)
        $obj = [PSCustomObject]@{
            Name             = $file.Name
            Hotkey           = $shortcut.Hotkey
            TargetPath       = $shortcut.TargetPath
            WorkingDirectory = $shortcut.WorkingDirectory
        }
        Write-Host "  Hotkey:" $obj.Hotkey
        Write-Host "  TargetPath:" $obj.TargetPath
        Write-Host "  WorkingDirectory:" $obj.WorkingDirectory
        $results += $obj
    } catch {
        Write-Host "エラー:" $_
    }
}

Write-Host "結果件数:" $results.Count
if ($results.Count -eq 0) {
    Write-Host "出力データがありません。"
    pause
    exit
}

$csvPath = Join-Path $folder "ショートカット一覧.csv"
Write-Host "CSV出力先:" $csvPath
$results | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
Write-Host "CSV出力完了"
pause