1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ペアになるフォルダを開くツール! (Cドラのフォルダからバックアップ先のDドラを開いたり、srcフォルダからビルド先のbuildフォルダを開いたり)

1
Last updated at Posted at 2026-02-26

ペアになるフォルダを開く

好きなファイル or フォルダを右クリックして
「送る」から実行するタイプのツールです。

家では同じようなものをNode.jsで作って使ってます。
言語やら実行環境やらが厳しい現場でも使いたいので、PowerShellで公開します。

便利すぎて一度使うと元に戻れないアレです。
無いとイライラしてしまう身体になるので注意。

Cドラのフォルダからバックアップ先のDドラを開いたり、
srcフォルダからビルド先のbuildフォルダを開いたりしたいときに使います。
仕様と具体例はソースコードの冒頭コメントに書いてあります。

正規表現で好きなパターンを複数書けるようにしてあるので、応用の幅が広いです。
家でも職場でも色んな場面で使えます。
ぜひぜひ。

手順

手順①:open-pair-folder.ps1というファイルを作って開いて以下のソースコードをコピペする (ファイル名はお好きに)

手順②:「変換ルール」という箇所に好きなルールを書いて、
エンコードをUFT-8 with BOMにして保存! (Shift_JISでもいいけど)

# ペアになるフォルダを開く
#
# 仕様:
#   あらかじめ変換ルールをいくつか決めておいて、
#   引数で渡されたパスをそのルールに沿って変換して開きます。
#   フォルダだけでなくファイルを選択しても同様の動作をします。
#   色々と応用が効きます。
#
# 具体例:
#   「C:\xxx\」を選択 ⇒ 「D:\c_drive_backup\xxx\」が開く (バックアップ先を開く)
#   「D:\c_drive_backup\xxx\」を選択 ⇒ 「C:\xxx\」が開く (バックアップ元を開く)
#   「C:\xxx\a.txt」を選択 ⇒ 「D:\c_drive_backup\xxx\」が開く (このようなファイル選択も可)
#   「src\main\webapp\xxx\」を選択 ⇒ 「work\main\webapp\xxx\」が開く (ビルド先を開く)
#   「work\main\webapp\xxx\」を選択 ⇒ 「src\main\webapp\xxx\」が開く (ソース側を開く)

Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'

# 変換ルール
$rules = @(
  # 渡されたパスがここに書いた正規表現で置換されます (複数指定可)

  # 例:バックアップ元フォルダ ⇒ バックアップ先フォルダ
  @{
    Pattern     = 'C:\\' # \のエスケープを忘れずに!
    Replacement = 'D:\c_drive_backup\' # \はエスケープ不要です!
  }
  # 例:バックアップ先フォルダ ⇒ バックアップ元フォルダ
  @{
    Pattern     = 'D:\\c_drive_backup\\' # \のエスケープを忘れずに!
    Replacement = 'C:\' # \はエスケープ不要です!
  }
)

function Convert-PathByRules {
  param(
    [Parameter(Mandatory=$true)][string]$Path,
    [Parameter(Mandatory=$true)][hashtable[]]$Rules
  )

  $out = $Path
  foreach ($r in $Rules) {
    $out2 = [regex]::Replace($out, $r.Pattern, $r.Replacement)
    if ($out2 -ne $out) { return $out2 }
  }
  return $out
}

function Show-Popup {
  param(
    [Parameter(Mandatory=$true)][string]$Message,
    [string]$Title = "open-pair-foler",
    [int]$Icon = 48
  )
  $ws = New-Object -ComObject WScript.Shell
  $null = $ws.Popup($Message, 0, $Title, $Icon)
}

function Get-BaseFolderFromSelection {
  param([Parameter(Mandatory=$true)][string]$SelectedPath)

  $full = (Resolve-Path -LiteralPath $SelectedPath).Path
  if (Test-Path -LiteralPath $full -PathType Container) { return $full }
  return [System.IO.Path]::GetDirectoryName($full)
}

if ($args.Count -lt 1 -or [string]::IsNullOrWhiteSpace([string]$args[0])) {
  Show-Popup -Message "引数がありません。`r`n元となるファイルやフォルダを`r`n「送る」やドラッグ&ドロップで指定してください。"
  exit 1
}

foreach ($selected in $args) {
  if ([string]::IsNullOrWhiteSpace([string]$selected)) { continue }

  try {
    if (-not (Test-Path -LiteralPath $selected)) {
      Show-Popup -Message "指定されたパスは存在しません。`r`n`r`n$selected"
      continue
    }

    $baseFolder = Get-BaseFolderFromSelection -SelectedPath $selected

    $mappedFolder = Convert-PathByRules -Path $baseFolder -Rules $rules

    if ($mappedFolder -eq $baseFolder) {
      Show-Popup -Message "対応するフォルダはありません。"
      # 以下のポップアップメッセージでもいい
      # Show-Popup -Message "渡されたファイルまたはフォルダにマッチする変換ルールがありません。"
      continue
    }

    if (-not (Test-Path -LiteralPath $mappedFolder -PathType Container)) {
      Show-Popup -Message "対応するフォルダはありません。`r`n`r`n元: $baseFolder`r`n先: $mappedFolder"
      continue
    }

    Start-Process explorer.exe -ArgumentList "`"$mappedFolder`""

  } catch {
    Show-Popup -Message ("エラー: {0}`r`n`r`n入力: {1}" -f $_.Exception.Message, $selected)
  }
}
  1. ショートカットを作成する
    1. open-pair-folder.ps1のショートカットを作る
    2. ショートカットのプロパティを開く
    3. [リンク先]に以下を入力して閉じる
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "open-pair-folder.ps1"

手順③:送るに登録する

  1. Win+Rからshell:sendtoを実行してSendToフォルダを開く
  2. 作ったショートカットをそこに移動させる

手順④:使う

  1. ファイル or フォルダを右クリックする
  2. キーボードでo(ショートカットの名前の先頭文字)を入力する
  3. ペアになるフォルダが開きます!やったね!

どうやってソースコードを書いたか

最初、ChatGPTに仕様を伝えて書いてもらおうとしたんですけど、
仕様を盛り過ぎたからかPowerShellの互換性問題が色々出て来て、なかなか動かなくて。

それで、家で作って使ってるNode.jsのソースコードを食わせて、
私が書いたこのコードは動いてるんですけど!?」と言ったらすぐ出てきました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?