Windows11のエクスプローラはタブが使えるのだが、その状態を保存及び再現する機能がない。
PowerShellで無理やりその機能を作ってみた。
セッションの保存
$windows = (New-Object -ComObject Shell.Application).Windows() | Where-Object { $_.Name -eq "エクスプローラー" -or $_.Name -eq "Windows Explorer" } $output = @() foreach ($win in $windows) { try { $handle = $win.HWND $path = $win.Document.Folder.Self.Path $output += [PSCustomObject]@{ HWND = $handle; Path = $path } } catch {} } $output | Group-Object HWND | ForEach-Object { $_.Group.Path -join "`t" } | Out-File "$env:USERPROFILE\Desktop\explorer_layout.txt" -Encoding utf8
セッションの再現
Add-Type -AssemblyName System.Windows.Forms Get-Content "$env:USERPROFILE\Desktop\explorer_layout.txt" | ForEach-Object { if ($_ -match '\S') { $tabs = $_ -split "`t" if ($tabs.Count -gt 0) { # 1つ目のパスを確実に「引数」として渡し、新しいウィンドウを起動 $firstPath = $tabs[0] Start-Process explorer.exe -ArgumentList "`"$firstPath`"" Start-Sleep -Milliseconds 1500 # ウィンドウと1つ目のタブが完全に開くのをしっかり待つ # 2つ目以降のタブがある場合のみ、追加処理を行う for ($i = 1; $i -lt $tabs.Count; $i++) { $wshell = New-Object -ComObject WScript.Shell # Ctrl+T を送信して新しいタブを作成 $wshell.SendKeys("^t") Start-Sleep -Milliseconds 600 # タブ生成を待つ # Alt+D で新しいタブのアドレスバーを選択 $wshell.SendKeys("%d") Start-Sleep -Milliseconds 300 # パスをクリップボードにセットして、Ctrl+V で貼り付け [System.Windows.Forms.Clipboard]::SetText($tabs[$i]) $wshell.SendKeys("^v") Start-Sleep -Milliseconds 200 # Enterキーを送信して確定 $wshell.SendKeys("{ENTER}") Start-Sleep -Milliseconds 800 # ネットワークドライブの応答を待つ } } } }
かなり無理やりなので、保存はともかく再現に時間がかかるしSendkeysを使う都合上再現中にマウスやキーボードをいじると失敗する。




