質問: 「AはBである」といった文章を、「BはAである」といった風に、テキストを編集したいです。 いつもCut & Pasteを使って入れ替えるのですが、この操作がかなり頻繁にあるため、もし1コマンドで実行できるようなショートカット等あれば教えていただけないでしょうか。 インターネットで検索しましたが、良い記事が見つからなかったため、質問させていただきました。どうぞよろしくお願いいたします。
回答: 残念ながら「AはBである」といった日本語表現を解析し、アプリケーションを限定せず、ワンアクションで置換処理を実行する機能はWindowsに存在しません。 しかしWindowsの標準機能であるPowershellと「ショートカット」の「ショートカットキー」を組み合わせればちょっとしたRPAを実現できます。 1. 任意のフォルダに後述のPowershellスクリプトを保存します。 スクリプトの作成方法や実行方法(.ps1ファイルの文字コードやSet-ExecutionPolicyなど)の説明は省略します。 2. 保存したスクリプトをエクスプローラー上で右クリックして「ショートカットの作成(S)」をクリックします。 3. 作成したショートカットファイルをデスクトップに貼り付けます。 4. デスクトップのショートカットファイルを右クリックして「プロパティ(R)」をクリックします。 5. 「ショートカット」タブの`リンク先(T):`の先頭に`powershell` を追記します。 6. `ショートカットキー(K):`に任意のキーを入力します。 !ショートカットのプロパティ 7. OKボタンを押します。 これで1コマンドでコピー(`Ctrl`+`C`)→置換→貼り付け(`Ctrl`+`V`)を実行できるショートカットを作成しました。 ※そのためxyzzyなど上記のショートカットキーを受け付けないソフトでは動作しません。 後は「BはAである」をカーソルで範囲選択してショートカットキーを押し、数秒待ちます。(powershellの起動を待つために時間がかかります) 下記のように動作します。一瞬黒い画面が出るのは仕様です。 !動作イメージ **Powershellスクリプト** ``` Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.SendKeys]::SendWait("%{TAB}") Start-Sleep -m 100 [System.Windows.Forms.SendKeys]::SendWait("^c") Start-Sleep -m 100 $src = Get-Clipboard $m = [regex]::Match($src, "(.+)は(.+)である") if($m.Success) { $res = "{0}は{1}である" -f $m.Groups[2], $m.Groups[1] $res | Set-Clipboard [System.Windows.Forms.SendKeys]::SendWait("^v") } ```