Board logo

标题: [注册表类] [已解决]右击资源管理器文件夹内空白处,新建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);新建后自动刷新当前文件夹;代码精简。
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\.txt\ShellNew]
  3. "ItemName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  4.   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,\
  5.   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,\
  6.   2d,00,34,00,37,00,30,00,00,00
  7. "Command"="nircmd exec hide cmd /c nircmd clipboard writefile \"%1\" &(nircmd wait 150)& (nircmd shellrefresh)"
  8. ;或者用powershell
  9. ;"Command"="nircmd exec hide powershell -c \"nircmd clipboard writefile '%1' (nircmd wait 300) (nircmd shellrefresh)\""
复制代码
基于6楼 @77七 大佬的方案,改造了右键菜单新建文本文档。
特点:直接在资源管理器的空白背景上右键菜单显示,很直观。不用额外控制,自动刷新显示新建文件。
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt]
  3. @="生成txt来自剪贴板(&T)"
  4. "Icon"="imageres.dll,-5304"
  5. [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt\command]
  6. @="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系统里修改后导出的,不知道高版本的系统能不能用
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\.txt\ShellNew]
  3. "ItemName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  4.   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,\
  5.   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,\
  6.   2d,00,34,00,37,00,30,00,00,00
  7. "Command"="powershell -WindowStyle Hidden -c \"set-content -literalpath '%1' -value (Get-Clipboard -Format text)\""
复制代码

作者: Five66    时间: 2024-8-26 01:34

哦,对了,得再给一个改回原来默认的
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\.txt\ShellNew]
  3. "ItemName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
  4.   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,\
  5.   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,\
  6.   2d,00,34,00,37,00,30,00,00,00
  7. "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
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt]
  3. @="cliptotxt"
  4. "Icon"="imageres.dll,-5323"
  5. [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt\command]
  6. @="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


    你既然选择第三方了。那不如直接用它自己的命令就好了。不让绕那么大个弯啊
借用大佬的名言,一刀流解决问题
  1. 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处理和使用命令行参数的规则

不手动刷新,试试下面的
  1. "Command"="nircmd clipboard addfile \"%1\""
  2. "Command"="nircmd exec hide nircmd clipboard addfile \"%1\""
  3. "Command"="nircmd exec hide cmd /c nircmd clipboard addfile \"%1\""
复制代码
手动刷新,试试下面的
  1. "Command"="nircmd clipboard addfile \"%1\"&nircmd wait 300&nircmd shellrefresh"
  2. "Command"="nircmd exec hide nircmd clipboard addfile \"%1\"&nircmd wait 300&nircmd shellrefresh"
  3. "Command"="nircmd exec hide cmd /c \"nircmd clipboard addfile \"\"%1\"\"&nircmd wait 300&nircmd shellrefresh\""
  4. "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问题吧 , 试试下面的
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\.txt\ShellNew]
  3. "Command"="nircmd exec hide cmd /c nircmd clipboard writefile \"%1\" >\"%1\"&(nircmd wait 150)& (nircmd shellrefresh)"
复制代码
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt]
  3. @="生成txt来自剪贴板(&T)"
  4. "Icon"="imageres.dll,-5304"
  5. [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt\command]
  6. @="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楼代码怎么不成功?
直接执行试下
  1. 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
  1.    
  2. Windows Registry Editor Version 5.00
  3. [HKEY_CLASSES_ROOT\.txt\ShellNew]
  4. "Command"="nircmd exec hide cmd /c nircmd clipboard addfile \"%1\"&(nircmd wait 250)& (nircmd shellrefresh)"
复制代码
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt]
  3. @="生成txt来自剪贴板(&T)"
  4. "Icon"="imageres.dll,-5304"
  5. [HKEY_CLASSES_ROOT\Directory\Background\shell\cliptotxt\command]
  6. @="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://www.bathome.net/) Powered by Discuz! 7.2