批处理 将命令输出写如剪贴板
批处理 读取剪贴板
for命令可以遍历另一个命令的输出结果
java代码
PrintClip.java
SysClipboardUtil.java
配置path环境变量
测试
使用For命令读入PrintClip命令的输出
应用
批处理 读取剪贴板
批处理 将命令输出写如剪贴板
批处理中如果想把命令的输出写入剪贴板是很容易的,使用管道符+clip
即可实现,例如1
dir | clip
这个命令把dir命令的输出写入到剪贴板中,剪贴板中的文本,如下所示:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 驱动器 G 中的卷是 原来的C盘
卷的序列号是 0C02-061D
G:\Desktop\Vscode测试 的目录
2019/08/26 23:14 <DIR> .
2019/08/26 23:14 <DIR> ..
2019/07/22 01:44 28 spanButtonCSS.txt
2019/08/26 23:06 146 test.bat
2019/07/23 17:22 314 test.html
2019/07/12 23:33 852 Test.java
2019/05/29 11:18 8,350 test.jsp
2019/07/24 21:19 1,588 test.md
2019/08/26 22:58 57 tmp.txt
2019/08/26 22:24 245 treej.bat
2019/04/29 13:50 613 正则表达式步骤.md
9 个文件 12,193 字节
2 个目录 215,235,579,904 可用字节
批处理 读取剪贴板
遗憾的是,批处理好像没有提供读取剪贴板的功能(反正我查了好久没查到).那只能迂回实现了.
for命令可以遍历另一个命令的输出结果
如下格式的for
命令,可以遍历单引号中
命令的输出结果.注意,命令要写在单引号中
.1
2
3FOR /F "delims=" %%i in ('命令') do (
echo %%i
)
所以,我只要自己写一个PrintClip
命令:这个PrintClip
命令可以打印出剪贴板中的文本到标准输出
.这样我就可通过上述的for命令遍历PrintClip
命令的标准输出,进入实现读取剪贴板的功能。
java代码
这个输出剪贴板文本的代码很简单,如下所示:
PrintClip.java
1 | package clipoard.output; |
其中SysClipboardUtil
是读写剪贴板的工具类,该工具类源码如下:
SysClipboardUtil.java
1 | package clipboard.util; |
将PrintClip.java
导出成可执行Jar
包,然后写一个同名的批处理文件PrintClip.bat
来运行这个可执行jar
,如下:1
2@echo off
java -jar "E:\dev2\idea_workspace\MyJavaTools\runable\PrintClip.jar"
配置path环境变量
为了让PrintClip.bat
可以在任意地方调用,需要把PrintClip.bat
文件所在的目录的路径
配置到Path
环境变量中,这和把java.exe
所在的路径配置到Path
环境变量之后,就可也在cmd
中执行java
命令是一样的道理。
配置好Path
环境变量后就可以通过自定义的PrintClip
命令来输出剪贴板中的内容了。
测试
现在复制下面的测试字符串:1
HelloWorld!
然后打开cmd
,运行PrintClip
命令,效果如下所示:1
2
3
4
5
6Microsoft Windows [版本 10.0.17134.915]
(c) 2018 Microsoft Corporation。保留所有权利。
G:\Desktop\Vscode测试>PrintClip
HelloWorld!
G:\Desktop\Vscode测试>
好的现在自定义的命令PrintClip
已经可以输出剪贴板中的内容到标准输出了,接下来用for命令遍历PrintClip
命令的输出即可读取剪贴板中的内容。
使用For命令读入PrintClip命令的输出
1 | @echo off |
现在复制下面的测试字符串:1
HelloWorld!
然后运行这个批处理,运行效果如下:1
2剪贴板中的内容:HelloWorld!
请按任意键继续. . .
好的,这就实现了读取剪贴板的内容了.
应用
我这么做是为了,方便使用自定义的mytree
命令打印Java
项目的目录结构,这样我在IDE
中复制好Java
项目的路径之后,就可以通过读取剪贴板中项目的路径,切换盘符,进入项目所在的路径,然后就可以调用mytree
命令将项目的目录结构输出到剪贴板中.接着再调用另一个自定义命令m
,将剪贴板中的数据格式化成Markdown
代码块.
说了一堆,这个批处理代码如下:1
2
3
4
5
6
7
8
9
10
11
12@echo off
:: 读取剪贴板中的内容,注意这里要求输入的是Java项目的路径.
FOR /F "delims=" %%i in ('PrintClip') do (
::切换盘符
%%~di
::进入目录
cd %%i
)
:: 打印Java项目的目录结构,并输出重定向到剪贴板中.
mytree java|clip
:: 将剪贴板中的文本封装成Markdown代码块
m cb cmd
其中%%~di
是变量拓展,获取该路径所在的盘符的意思,cd %%i
表示切换到该路径下.剩下的倒数两个命令是我自定义的命令.