82561


「AはBである」といった文章を、「BはAである」といった風に、テキストを編集したいです。  
いつもCut &
Pasteを使って入れ替えるのですが、この操作がかなり頻繁にあるため、もし1コマンドで実行できるようなショートカット等あれば教えていただけないでしょうか。

インターネットで検索しましたが、良い記事が見つからなかったため、質問させていただきました。どうぞよろしくお願いいたします。


CC BY-SA 4.0
2021-09-17T04:31:45.797
82546
2021-09-18T02:50:59.787
41680
question
windows
Windowsでのテキスト編集の時、文字を入れ替えたい


残念ながら「AはBである」といった日本語表現を解析し、アプリケーションを限定せず、ワンアクションで置換処理を実行する機能はWindowsに存在しません。

しかしWindowsの標準機能であるPowershellと[「ショートカット」の「ショートカットキー」](https://www.724685.com/word/wd190925.htm)を組み合わせればちょっとしたRPAを実現できます。

  1. 任意のフォルダに後述のPowershellスクリプトを保存します。  
スクリプトの作成方法や実行方法([.ps1ファイルの文字コード](https://social.technet.microsoft.com/Forums/ja-
JP/1d5bf04b-9b0a-4188-9328-a9eca3d897e8/powershell124731246312522125031248865288ps112289psm652891239825991?forum=powershellja)や[Set-
ExecutionPolicy](https://docs.microsoft.com/ja-
jp/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.1)など)の説明は省略します。

  2. 保存したスクリプトをエクスプローラー上で右クリックして「ショートカットの作成(S)」をクリックします。
  3. 作成したショートカットファイルをデスクトップに貼り付けます。
  4. デスクトップのショートカットファイルを右クリックして「プロパティ(R)」をクリックします。
  5. 「ショートカット」タブの`リンク先(T):`の先頭に`powershell `を追記します。
  6. `ショートカットキー(K):`に任意のキーを入力します。  
[![ショートカットのプロパティ](https://i.stack.imgur.com/fKiyr.png)](https://i.stack.imgur.com/fKiyr.png)

  7. OKボタンを押します。

これで1コマンドでコピー(`Ctrl`+`C`)→置換→貼り付け(`Ctrl`+`V`)を実行できるショートカットを作成しました。  
※そのためxyzzyなど上記のショートカットキーを受け付けないソフトでは動作しません。

後は「BはAである」をカーソルで範囲選択してショートカットキーを押し、数秒待ちます。(powershellの起動を待つために時間がかかります)  
下記のように動作します。一瞬黒い画面が出るのは仕様です。

[![動作イメージ](https://i.stack.imgur.com/07yxb.gif)](https://i.stack.imgur.com/07yxb.gif)

**Powershellスクリプト**

[code]

    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")
    }
    
[/code]


CC BY-SA 4.0
2021-09-18T02:50:59.787
82561
2021-09-18T02:50:59.787
9820
82546
answer