更改剪贴板上粘贴的输出

时间:2019-10-24 00:39:27

标签: r windows powershell clipboard

我经常不得不将Windows 10程序或对话框中的文件路径复制到我的R代码中。由于R转义了反斜杠,因此我总是必须将反斜杠更改为正斜杠或双反斜杠,所以我试图解决此问题,以便在我复制文本然后使用快捷键的某些特殊组合进行粘贴时,它用双反斜杠代替了我的反斜杠。因此,例如,如果我复制了“ C:\ windows \ system32 \ drivers \ etc”,然后按了Ctrl + Alt + P等组合键(甚至使用了右键单击上下文菜单),我想更改粘贴的内容输出到“ C:\\ windows \\ system32 \\ drivers \\ etc”,而不是复制的内容。我以为我可以在PowerShell中执行以下操作:

$copiedtext = Get-Clipboard;
$copiedtext = -join(-join('"', $copiedtext -replace "\\", '\\'), '"');
Set-Clipboard $copiedtext;
Write-Output $copiedtext | clip

但这只会将剪贴板输出到控制台(如果我为PowerShell程序分配快捷方式并为其分配快捷键,则该按钮将不起作用)。谁能推荐如何修改此设置以实现我想要的功能,还是推荐一些其他语言以使Windows始终将某些字符的快捷键组合识别为我的特殊粘贴操作?如果可能的话,我也不想启动程序就这样做。

1 个答案:

答案 0 :(得分:1)

注意:虽然以下方法有效,但它是:

  • 不完全可靠

最终,最好还是基于AutHotkey之类的专用工具来寻找解决方案。


  • 创建一个脚本,例如$HOME\pasteEscaped.ps1,其中包含以下内容:
# Get text from the clipboard and escape '\' chars. as '\\'
$escapedText = (Get-Clipboard -Format Text) -replace '\\', '\\' 

# Helper COM object for sending keystrokes.
$sh = New-Object -ComObject WScript.Shell

# Switch back to the previously active application...
$sh.SendKeys("%{tab}")
Start-Sleep -Milliseconds 100
# ... and send the escaped text. additionally escaped for .SendKeys()
$sh.SendKeys(($escapedText -replace '[{}()+^%]', '{$&}'))
  • 创建快捷方式文件,例如在您的桌面上,具有以下属性:

    • 目标:

      powershell.exe -executionpolicy bypass -noprofile -file %USERPROFILE%\pasteEscaped.ps1
      
    • 运行:Minimized

    • 快捷键:(您选择的快捷键)


此后,当您按快捷键时,将从剪贴板中检索文本,将其中的\实例加倍,然后使用模拟键盘输入将结果文本粘贴到前景窗口中。

>