はじめに
毎日 Excel や Slack、メールで「改行コードが入ったまま貼り付けてしまって気持ち悪い…」と感じている方、または「社外秘キーワードを含んだまま画面共有してしまった…」というヒヤリハットを経験した方に向けた記事です。
Windows 10 には「Windows キー + V」で履歴が見れる新しいクリップボードがありますが、「一部だけ削除」は標準ではできません。本記事では、PowerShell を使って「指定文字列だけを削除したバージョン」をクリップボードに戻す方法を解説します。
最終的には右クリックメニューからワンクリックで実行できるようになるので、普段使いの PC 作業が少し快適になります。
前提知識
- Windows 10 build 1809 以降(PowerShell 5.1 以降)を利用していること
- PowerShell の実行ポリシーが RemoteSigned 以上であること(
Set-ExecutionPolicy RemoteSigned -Scope CurrentUserで変更可) - レジストリの書き換えに抵抗がないこと(右クリックメニュー登録時)
なぜ「部分削除」が必要なのか
クリップボードの内容をそのまま使うと以下のような不便があります。
- 改行コードが残ると Excel のセルが複数に分断される
- 社外秘キーワード(社名・プロジェクトコードなど)が残ったまま Slack にポストしてしまう
- 正規表現置換が使えるエディタを開くまでもない「ちょっとした削除」が面倒
この「ちょっとした削除」を「コピー → 右クリック → 削除実行 → 貼り付け」の 4 ステップで完結させるのが本記事のゴールです。
PowerShell 一発スクリプトの作り方
ステップ1:スクリプトファイルを作成する
好きなフォルダ(例:C:\Tools\ClipTrim.ps1)に以下を保存します。
Powershell# ClipTrim.ps1 param( [string]$RemovePattern = '\r?\n' # デフォルトは「改行」削除 ) Add-Type -AssemblyName System.Windows.Forms $text = [System.Windows.Forms.Clipboard]::GetText() if (-not $text) { exit } $trimmed = $text -replace $RemovePattern, '' # 空文字で置換=削除 [System.Windows.Forms.Clipboard]::SetText($trimmed)
ポイントは [System.Windows.Forms.Clipboard] を使うことで、外部モジュールをインストールしなくても .NET Framework 標準でクリップボードにアクセスできることです。
ステップ2:引数を外から渡してみる
PowerShell を開いて以下を実行すると、クリップボードの改行が一瞬で消えます。
PowershellC:\Tools\ClipTrim.ps1
社外秘キーワード「ABC-12345」を削除したいときは正規表現を渡すだけ:
PowershellC:\Tools\ClipTrim.ps1 -RemovePattern 'ABC-\d+'
ステップ3:レジストリに右クリックメニューを登録する
レジストリ エディタ(regedit)で以下のキーを新規作成:
HKEY_CLASSES_ROOT\Directory\Background\shell\ClipTrim
(既定) = "クリップボードから改行削除"
HKEY_CLASSES_ROOT\Directory\Background\shell\ClipTrim\command
(既定) = "powershell.exe -WindowStyle Hidden -File C:\Tools\ClipTrim.ps1"
これでデスクトップの空白を右クリックして「クリップボードから改行削除」が選べるようになります。
※ フォルダ内の背景を右クリックしても表示されます。
ステップ4:アイコンを付けて見た目を整える
ClipTrim キーに新規文字列値 Icon を追加し、任意の .ico ファイルパスを指定するとアイコンが表示されます。
例:C:\Tools\clip.ico
ハマりどころと解決策
| 現象 | 原因 | 解決策 |
|---|---|---|
| 実行しても何も変わらない | クリップボードが空、あるいは PowerShell の実行ポリシーが Restricted | Get-ExecutionPolicy で確認し、Set-ExecutionPolicy RemoteSigned -Scope CurrentUser |
| 日本語が文字化ける | コンソールのコードページが 932 以外 | スクリプト内で [Console]::OutputEncoding = [Text.Encoding]::UTF8 を追加 |
| 右クリックメニューが表示されない | レジストリのパスが間違っている、あるいはエスケープ文字 | powershell.exe -File "C:\Tools\ClipTrim.ps1" のようにダブルクォートで囲む |
応用編:複数パターンを切り替える
レジストリに複数のキーを作れば、用途別にすぐ使えるようにできます。
例:「改行削除」「全角スペース削除」「社外秘キーワード削除」の 3 つを登録
shell
├─ClipTrimCR
│ ├─(既定) = "改行削除"
│ └─command = "powershell.exe -File C:\Tools\ClipTrim.ps1"
├─ClipTrimSpace
│ ├─(既定) = "全角スペース削除"
│ └─command = "powershell.exe -File C:\Tools\ClipTrim.ps1 -RemovePattern ' '"
└─ClipTrimSecret
├─(既定) = "社外秘キーワード削除"
└─command = "powershell.exe -File C:\Tools\ClipTrim.ps1 -RemovePattern 'ABC-\\d+|ProjectX'"
まとめ
今回は Windows 10 標準の PowerShell だけで「クリップボードの一部分を削除」する方法を紹介しました。
- 外部ツール不要、レジストリ登録で右クリック一発
- 正規表記に対応しているので柔軟な削除が可能
- 複数パターンを登録すれば用途に応じて即実行
スクリプトは 10 行程度と短く、会社のポリシーでフリーソフトが使えない環境でも導入しやすいはずです。
次回は、Power Automate Desktop と連携して「コピーした瞬間自動で削除」する方法を紹介する予定です。
参考資料
- Windows フォームによるクリップボードの操作 - Microsoft Docs
- PowerShell 実行ポリシーについて - Microsoft Docs
- 正規表現 リファレンス - Microsoft Docs
