标题: [注册表类] [已解决]右击资源管理器文件夹内空白处,新建txt,txt内直接包含剪贴板中的内容? [打印本页]
作者: lforl 时间: 2024-8-25 23:43 标题: [已解决]右击资源管理器文件夹内空白处,新建txt,txt内直接包含剪贴板中的内容?
本帖最后由 lforl 于 2024-10-23 21:34 编辑
不太想用Scripting.FileSystemObject。
想纯粹的cmd写入reg。
调用了第三方cmd:nircmd。
基于3楼 @Five66 大佬的方案,改造了右键菜单新建文本文档。
特点:完美隐藏了运行窗口;如果遇到重名自动加(1);新建后自动刷新当前文件夹;代码精简。- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\.txt\ShellNew]
- "ItemName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
- 6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
- 00,6e,00,6f,00,74,00,65,00,70,00,61,00,64,00,2e,00,65,00,78,00,65,00,2c,00,\
- 2d,00,34,00,37,00,30,00,00,00
- "Command"="nircmd exec hide cmd /c nircmd clipboard writefile \"%1\" &(nircmd wait 150)& (nircmd shellrefresh)"
- ;或者用powershell
- ;"Command"="nircmd exec hide powershell -c \"nircmd clipboard writefile '%1' (nircmd wait 300) (nircmd shellrefresh)\""
复制代码
基于6楼 @77七 大佬的方案,改造了右键菜单新建文本文档。
特点:直接在资源管理器的空白背景上右键菜单显示,很直观。不用额外控制,自动刷新显示新建文件。- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt]
- @="生成txt来自剪贴板(&T)"
- "Icon"="imageres.dll,-5304"
-
- [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt\command]
- @="nircmd exec hide cmd /c nircmd clipboard addfile \"新建文本.txt\""
复制代码
感谢楼下几位热心的大佬帮助!总结为以上方案,以备忘和待有需要的有缘人获取。
作者: jyswjjgdwtdtj 时间: 2024-8-26 00:19
只是点击鼠标就可以创建txt怕是得给文件资源管理器挂钩子了
作者: Five66 时间: 2024-8-26 01:22
将下面的保存为ansi编码的reg文件
合并后原来的新建txt就会变成调用powershell ,然后读取粘贴板的文本数据并创建txt文件
注册表是在win7系统里修改后导出的,不知道高版本的系统能不能用- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\.txt\ShellNew]
- "ItemName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
- 6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
- 00,6e,00,6f,00,74,00,65,00,70,00,61,00,64,00,2e,00,65,00,78,00,65,00,2c,00,\
- 2d,00,34,00,37,00,30,00,00,00
- "Command"="powershell -WindowStyle Hidden -c \"set-content -literalpath '%1' -value (Get-Clipboard -Format text)\""
复制代码
作者: Five66 时间: 2024-8-26 01:34
哦,对了,得再给一个改回原来默认的- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\.txt\ShellNew]
- "ItemName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
- 6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
- 00,6e,00,6f,00,74,00,65,00,70,00,61,00,64,00,2e,00,65,00,78,00,65,00,2c,00,\
- 2d,00,34,00,37,00,30,00,00,00
- "NullFile"=""
复制代码
作者: lforl 时间: 2024-8-26 06:56
将下面的保存为ansi编码的reg文件
合并后原来的新建txt就会变成调用powershell ,然后读取粘贴板的文本数据 ...
Five66 发表于 2024-8-26 01:22
感谢大佬,很棒!在win10完全实现了:从剪贴板内容新建文本文档。
有两个困惑的小地方:
1.cmd窗口未能真正的隐藏,还是出现一晃而过的画面。虽然感觉写了隐藏窗口的开关。
2.新建txt后,需要右键或者F5手动刷新资源管理器才会出现那个新建的txt。这点跟改造之前有点不一样。困惑中...
作者: 77七 时间: 2024-8-26 11:48
用winclip- Windows Registry Editor Version 5.00
- [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt]
- @="cliptotxt"
- "Icon"="imageres.dll,-5323"
- [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt\command]
- @="cmd.exe /q /c \"if not exist \"new.txt\" (winclip -p |find /v \"\" > \"new.txt\"&exit) else for /l %%l in (2 1 10000) do if not exist \"new(%%l).txt\" (winclip -p |find /v \"\" > \"new(%%l).txt\"&exit)\""
复制代码
作者: Five66 时间: 2024-8-26 12:47
回复 5# lforl
1:控制台程序是这样的,本身就有个窗口,得用无界面的图形程序来调用,或者专门弄一个无界面的图形程序出来,总之你可以试试用其他第三方
2:新建txt,win7下不用刷新就能看到,只是原来是新建之后会自动选择这个文件重命名那没了(文件一多就很难找到了),这个不知道怎么解决,不过你可以试试设置一下“资源管理器自动刷新”,总之因为是改成调用其他程序了,新建时自动选择文件重命名这个肯定会没了
3:还有修改时(3楼)和恢复时(4楼)漏了删掉原来的,
修改时(3楼)最后加上一行
"NullFile"=-
恢复时(4楼)最后加上一行
"Command"=-
作者: Five66 时间: 2024-8-26 13:37
回复 5# lforl
关于2再说一下,执行是需要时间的,窗口一晃而过之后,得等到它执行完后才会创建生成txt,因此你新建后或许不能立马就看见txt,而且由于用的是powershell,从启动直到执行完的时间还挺长的(相对于其他程序来说)
作者: lforl 时间: 2024-8-26 14:22
3楼 @Five66
6楼 @77七
两位大佬的都非常好用。
我在你们的基础上,借助nirCMD,在你们的命令之前加入:nircmd exec hide
完美实现了窗口隐藏。不再出现一晃而过的命令窗口。
@Five66的方案上,我加上这个(等一会,刷新)也搞定了自动刷新问题:(nircmd wait 300) (nircmd shellrefresh)
@77七的方案不用刷新,自动会显示。
感谢两位大佬!
作者: ppll2030 时间: 2024-8-26 15:01
回复 9# lforl
你既然选择第三方了。那不如直接用它自己的命令就好了。不让绕那么大个弯啊
借用大佬的名言,一刀流解决问题- nircmd.exe clipboard writefile 新建文档.txt
复制代码
作者: 77七 时间: 2024-8-26 15:53
本帖最后由 77七 于 2024-8-26 22:13 编辑
回复 10# ppll2030
这个命令我试过,包括xclip cliptext winclip,都会把文本的换行符改为LF,其中xclip和winclip支持管道,其它的不知道,不会用,最后我选用了winclip -p ,再用 | find处理下就正常了。
我说的有误,
更正:请看下文。。
作者: 77七 时间: 2024-8-26 16:20
回复 1# lforl
楼主把代码改成这样,其实就和我的代码没什么关系了
作者: lforl 时间: 2024-8-26 19:28
本帖最后由 lforl 于 2024-8-26 19:32 编辑
回复 lforl
楼主把代码改成这样,其实就和我的代码没什么关系了
77七 发表于 2024-8-26 16:20
哈哈,有,启发很大。你那判断是否重复文件名很好!谢谢大佬加持!
主要考虑到nircmd一引入,就可以大幅度简化代码。
并且这个非常小,效率很高,有他,在各种常见场景,几乎就不需要用其他第三方了。
你说有换行符被改变问题,已经非常专业,目前我的应用场景暂时触及不到差别,你是否考虑给nirsoft.net发个邮件。作者一直保持更新的。也许一个邮件就可以将它完美化。
作者: ppll2030 时间: 2024-8-26 20:13
回复 11# 77七
特意下了个2.86最新版,貌似不会啊。是不是你的版本太老了
作者: 77七 时间: 2024-8-26 20:40
回复 14# ppll2030
我这里是LF。
作者: ppll2030 时间: 2024-8-26 20:57
回复 15# 77七
作者: 77七 时间: 2024-8-26 21:21
回复 16# ppll2030
看来论坛内的代码或者文字使用 nircmd或者其它工具读取重定向,换行符都是LF。
作者: ppll2030 时间: 2024-8-26 21:50
回复 17# 77七
哈哈。确实像是论坛的问题,powershell获取也一样。
不过我用的手势不受影响
作者: Five66 时间: 2024-8-26 23:30
啊,1楼的用nircmd 了,应该可以不用powershell -c了,可以试试用cmd /c加快速度,或者干脆直接用nircmd(或者nircmd exec hide nircmd 。。。。)
作者: lforl 时间: 2024-8-27 06:52
回复 19# Five66
我试了,想改用cmd /c,一直不成功。大佬改改看,我不知道问题出在哪里。
作者: ygqiang 时间: 2024-8-27 12:54
本帖最后由 ygqiang 于 2024-8-27 13:03 编辑
回复 1# lforl
1楼的2个代码,win11x64系统下测试,复制中文内容的时候,
为啥生成的txt文件内容里面都是问号????
好像是win11系统刚开机进入系统的时候,会遇到,过一段时间以后,测试又正常了?
作者: ppll2030 时间: 2024-8-27 13:09
回复 1# lforl
你这个所谓的 最终的办法都是通过 nircmd clipboard 来获取剪贴板的内容,干嘛要调用那些PS或cmd无关窗口,又想办法隐藏窗口呢?
注册表里直接 nircmd clipboard addfile 新建文档.txt 就完事儿啊
nircmd exec hide cmd /c 这些纯纯的多余啊,nircmd 自身命令本来就是无窗操作的。你可以看16楼的操作。
还有一个问题,addfile是添加的意思,原来有这个文件和且文件内有内容的,只会在后面添加剪切板的内容。你连续操作两次,就会看到文本的重复内容了。
建议改为 writefile ,它就是一次性覆盖。之前原有有内容都会删除,只保留剪切板这一次的内容。
两者区别就是添加和覆盖。
作者: Five66 时间: 2024-8-27 13:28
回复 20# lforl
由于不知道nircmd处理和使用命令行参数的规则
不手动刷新,试试下面的- "Command"="nircmd clipboard addfile \"%1\""
- "Command"="nircmd exec hide nircmd clipboard addfile \"%1\""
- "Command"="nircmd exec hide cmd /c nircmd clipboard addfile \"%1\""
复制代码
手动刷新,试试下面的- "Command"="nircmd clipboard addfile \"%1\"&nircmd wait 300&nircmd shellrefresh"
- "Command"="nircmd exec hide nircmd clipboard addfile \"%1\"&nircmd wait 300&nircmd shellrefresh"
- "Command"="nircmd exec hide cmd /c \"nircmd clipboard addfile \"\"%1\"\"&nircmd wait 300&nircmd shellrefresh\""
- "Command"="nircmd exec hide cmd /c nircmd clipboard addfile \\\"\"%1\"\\\"^^^&nircmd wait 300^^^&nircmd shellrefresh"
复制代码
作者: lforl 时间: 2024-8-27 15:01
回复 22# ppll2030
writefile替代addfile这个建议不错,我的确没仔细看文档。应该是替换而不是续加更合适。
nircmd exec hide cmd /c ——我是为了隐藏后面cmd窗口用。其实我后面还有其他命令,没涉及这个话题,所以精简了。谢谢大佬提示!
作者: lforl 时间: 2024-8-27 15:13
回复 23# Five66
改为cmd也成功了。原来是我前面一直用‘%1’来试不成功。改作你的\“%1\”就可以了。
已经更新到主贴了。
这贴收获真大啊,获得楼上诸位大佬教诲,深表感谢!
作者: ygqiang 时间: 2024-8-31 06:56
回复 1# lforl
发现一个bug,win11x64系统,系统刚开机进入桌面。
如果没有复制内容。
鼠标右键选择,新建-“文本文档”,没有反应,不会新建文本文件。
作者: ygqiang 时间: 2024-8-31 07:00
回复 23# Five66
回复 17# 77七
2位大神好。26楼遇到一个bug,帮忙看看谢谢
作者: 77七 时间: 2024-8-31 07:56
回复 27# ygqiang
可以利用预处理,生成一个空文件
给winclip -p | find /v \"\" 加个括号再重定向就行了。
作者: ygqiang 时间: 2024-8-31 10:50
回复 28# 77七
谢谢,那1楼代码如何修改呢?
作者: Five66 时间: 2024-8-31 12:13
本帖最后由 Five66 于 2024-8-31 12:15 编辑
回复 29# ygqiang
也许大概是nircmd的writefile问题吧 , 试试下面的- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\.txt\ShellNew]
- "Command"="nircmd exec hide cmd /c nircmd clipboard writefile \"%1\" >\"%1\"&(nircmd wait 150)& (nircmd shellrefresh)"
复制代码
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt]
- @="生成txt来自剪贴板(&T)"
- "Icon"="imageres.dll,-5304"
-
- [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt\command]
- @="nircmd exec hide cmd /c nircmd clipboard addfile \"新建文本.txt\" >\"新建文本.txt\""
复制代码
作者: ygqiang 时间: 2024-8-31 14:58
本帖最后由 ygqiang 于 2024-8-31 18:46 编辑
回复 30# Five66
回复 28# 77七
谢谢,测试过可用。
1楼的2个代码,
在一台Windows 11 专业版环境,测试都可用,
Windows 11 家庭中文版环境,测试却不可用。
又找了另一台Windows 11 专业版电脑,测试也不可用。
这是为啥?
nircmd.exe,都已经复制到下面目录下了。
C:\Windows\System32
C:\Windows\SysWOW64
作者: 77七 时间: 2024-8-31 18:31
回复 31# ygqiang
我用30楼代码怎么不成功?
直接执行试下
- nircmd clipboard addfile "新建文本.txt" >"新建文本.txt"
复制代码
作者: ygqiang 时间: 2024-8-31 18:36
本帖最后由 ygqiang 于 2024-8-31 18:45 编辑
回复 32# 77七
找了另一台Windows 11 专业版电脑,测试了。在命令提示符下,切换到d盘根目录。
你这个命令运行以后,生成了新的txt文件,但是复制的文字,txt里面没有内容
下面的命令:生成了新的txt文件,复制的文字,也在txt文件里。
nircmd clipboard addfile "新建文本.txt"
作者: 77七 时间: 2024-8-31 18:49
回复 33# ygqiang
我觉得1楼的两个代码还是有很大不同的,不知道具体需求是什么样的?一个出现重名文件则添加序号,一个直接追加输出 到 固定文件名。
作者: ygqiang 时间: 2024-8-31 19:48
本帖最后由 ygqiang 于 2024-8-31 19:49 编辑
回复 34# 77七
1楼2个代码,都有31楼说的问题
作者: Five66 时间: 2024-8-31 23:11
回复 35# ygqiang -
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\.txt\ShellNew]
- "Command"="nircmd exec hide cmd /c nircmd clipboard addfile \"%1\"&(nircmd wait 250)& (nircmd shellrefresh)"
复制代码
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt]
- @="生成txt来自剪贴板(&T)"
- "Icon"="imageres.dll,-5304"
-
- [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt\command]
- @="nircmd exec hide cmd /c nircmd clipboard writefile \"新建文本.txt\""
复制代码
作者: ygqiang 时间: 2024-9-1 09:43
回复 36# Five66
测试了。
第一个代码,新建txt文件,复制的内容,没复制到txt文件里。
第2个代码,效果达到了。不过如果复制中文文字,txt文件里是????
作者: aloha20200628 时间: 2024-9-1 11:27
本帖最后由 aloha20200628 于 2024-9-1 14:58 编辑
剪贴板文本数据默认采用unicode编码
如果其中的全部内容没有超出ANSI或gb2312字符集的数据,用ANSI或gb2312保存本地文件即可在本地系统默认码页(936)下正常显示
但如果其中确有字符超出ANSI或gb2312字符集范围,则须用unicode编码或utf-8编码保存本地文本文件,并在本地相应码页下才能正常显示
因此nircmd只用单一编码文件保存剪贴板文本数据不能适应多种实况 ... 仅供参考
作者: 77七 时间: 2024-9-1 12:08
回复 35# ygqiang
没必要一直纠结1楼代码,那是适合楼主的代码。即使在你那测试成功,我觉得很少人用 “把默认的新建空文本,替换为粘贴剪贴板内容“ 的功能,你说呢?其它的在34楼已经说过了。
作者: lforl 时间: 2024-9-1 18:32
本帖最后由 lforl 于 2024-9-1 18:34 编辑
剪贴板文本数据默认采用unicode编码
如果其中的全部内容没有超出ANSI或gb2312字符集的数据,用ANSI或gb2 ...
aloha20200628 发表于 2024-9-1 11:27
nircmd作者考虑到这些情况了,提供了两个参数:
• writefile - 将剪贴板内容写入文件。(仅限文本)
• writeufile - 将剪贴板内容写入 Unicode 文件。(仅限文本)
楼上有朋友遇到其他问题,我这边的确没环境模拟测试。目前我用于win10 x64 老坛酸菜。
感觉很方便。其他的疑难就靠自己的研究精神和大佬帮忙了。
如果的确很喜欢nircmd可以把他的帮助都看一遍,很有帮助。
如果的确是作者没考虑到某些情况,也可以给他发邮件,他下一版本可能会为您补上更新哦~~
作者: ygqiang 时间: 2024-9-1 19:20
回复 40# lforl
那看来只适合win10,系统环境下使用了
作者: Five66 时间: 2024-9-4 00:04
回复 37# ygqiang
第一个当作不支持就是了
第二个,win11好像默认是utf8,也许是打开查看时,将ansi当成utf8来解读了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |