文章

windows实现右键菜单“粘贴为文件”

windows实现右键菜单“粘贴为文件”

需求背景

在复制文本时,总有需要将复制的内容粘贴到的一个新的空文件中再保存的时候,这样的流程就很繁琐,需要改进这个重复的流程。

编写脚本

编写可将粘贴板内容输出为文件的Powershell脚本,并存放至一个新建的文件夹,我的文件夹是“D:\program\scripts”。脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# PasteWithGUI.ps1
# 加载 VisualBasic 程序集
Add-Type -AssemblyName Microsoft.VisualBasic

# 获取剪贴板内容
$clipboardContent = Get-Clipboard -Raw

# 弹出输入框让用户输入文件名
$fileName = [Microsoft.VisualBasic.Interaction]::InputBox(
    "请输入文件名(带扩展名)", 
    "保存剪贴板内容为文件", 
    "新建文件_$(Get-Date -Format 'yyyyMMdd-HHmmss').txt"
)

# 如果用户点了取消或未输入,则退出
if ([string]::IsNullOrEmpty($fileName)) { exit }

# 保存文件
$filePath = Join-Path -Path (Get-Location) -ChildPath $fileName
[System.IO.File]::WriteAllText($filePath, $clipboardContent, [System.Text.Encoding]::UTF8)

# 可选:打开文件所在位置
# explorer "/select, `"$filePath`""

点击这个脚本会先显示黑色终端窗口,之后再显示文本输入窗口要求输入文件名。 需要到点击才能运行,而且还显示了终端显色窗口,不方便,需要将其编译为exe可执行文件以隐藏终端窗口

安装PS2EXE并编译以上脚本

安装PS2EXE是为了用这个工具将Powershell脚本编译为执行文件。步骤如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 以管理员身份打开powershell终端,这是重点
# 2. 临时更改脚本执行策略为Bypass,无视限制
Set-ExecutionPolicy Bypass -Scope Process -Force
# 3.1 直接使用Install-Module命令安装
nstall-Module -Name PS2EXE -Force
# 如果3.1安装成功就跳过3.2步骤,如果提示没有管理员权限则直接走3.2步骤

# 3.2 使用显式管理员权限安装,本人win11系统,试了只能用这个命令才能安装,有点坑
Start-Process powershell -ArgumentList "Install-Module -Name PS2EXE -Force" -Verb RunAs 
# 输入以上命令后,会打开另一个powershell窗口,如果提示需要安装nuget工具,就确认按Y
# 使用PS2EXE命令编译PasteWithGUI.ps1为exe文件
Invoke-PS2EXE -InputFile "D:\program\scripts\PasteWithGUI.ps1" -OutputFile "D:\program\scripts\PasteWithGUI.exe" -IconFile "D:\program\scripts\app32.ico" -NoConsole
# "D:\program\scripts\app32.ico" 是我自己弄的程序ico图标,如果没有,可去掉-IconFile参数,也不影响编译

执行完以上命令后,在“D:\program\scripts”文件夹就可以看到PasteWithGUI.exe可执行文件了,可以复制一段文本再点击这个可执行文件试试有没有问题,没有问题我们就下一步

编写注册文件

注册文件是为了将可执行文件加入右键菜单,这样在一个文件夹中右键后直接点击相应菜单就可以调用了,很方便。先看一个注册文件的模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Windows Registry Editor Version 5.00

; 添加到文件右键菜单(针对所有文件)
[HKEY_CLASSES_ROOT\*\shell\YourAppName]
@="用我的应用打开"
"Icon"="C:\\Path\\To\\YourApp.exe"

[HKEY_CLASSES_ROOT\*\shell\YourAppName\command]
@="\"C:\\Path\\To\\YourApp.exe\" \"%1\""

; 添加到文件夹右键菜单(右键文件夹时显示)
[HKEY_CLASSES_ROOT\Directory\shell\YourAppName]
@="用我的应用处理"
"Icon"="C:\\Path\\To\\YourApp.exe"

[HKEY_CLASSES_ROOT\Directory\shell\YourAppName\command]
@="\"C:\\Path\\To\\YourApp.exe\" \"%V\""

; 添加到桌面/文件夹空白处右键菜单
[HKEY_CLASSES_ROOT\Directory\Background\shell\YourAppName]
@="用我的应用打开"
"Icon"="C:\\Path\\To\\YourApp.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\YourAppName\command]
@="\"C:\\Path\\To\\YourApp.exe\" \"%V\""

我只需要在文件夹空白处右键即可,替换掉相应字符串后,我的注册文件内容如下:

1
2
3
4
5
6
7
8
9
Windows Registry Editor Version 5.00

; 添加到桌面/文件夹空白处右键菜单
[HKEY_CLASSES_ROOT\Directory\Background\shell\PasteWithGUI]
@="粘贴为文件"
"Icon"="D:\\program\\scripts\\app32.ico"

[HKEY_CLASSES_ROOT\Directory\Background\shell\PasteWithGUI\command]
@="\"D:\\program\\scripts\\PasteWithGUI.exe\" \"%V\""

将上面内容,保存为.reg文件,名字随意,我的是PasteWithGUI_Add_RightClick.reg,然后双击这个.reg文件,确认三次后即可将可执行文件加入右键菜单。在文件夹空白处右键试试,效果如下:

右键菜单

粘贴为文件

在弹出的输入窗口中输入自己的文件名即可根据复制内容生成相应的文件。

本文由作者按照 CC BY 4.0 进行授权