找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 1428|回复: 14

[系统相关] 新增“复制文件名”的右键菜单

[复制链接]
发表于 2026-3-21 15:55:01 | 显示全部楼层 |阅读模式
能不能用bat格式的脚本只运行一次,就在windows操作系统的电脑上,永久在右键菜单上增加一项名为“复制文件名”的菜单项,然后,选择某文件夹下的文件和子文件夹以后,右键点击“复制文件名”即可复制这些文件的名字和文件夹的名字,并拷贝到剪切板,并且顺序是按照文件名排序,并且文件的后缀名自动去除。请会的朋友帮忙写一个脚本,谢谢!
发表于 2026-3-22 13:17:46 来自手机 | 显示全部楼层
思路很简单,现在爪机,不好编写代码,,新版论坛爪机模式下,没有代码框,也没有其他功能,,
----代码如下--
Reg add "HKEY_CLASSES_ROOT\*\Shell\copyname" /v "MUIVerb" /t REG_SZ /d "复制文件名" /f  
Reg add "HKEY_CLASSES_ROOT\*\Shell\copyname" /v "icon" /t REG_SZ /d "%Shell32.dll,24" /f
Reg add "HKEY_CLASSES_ROOT\*\Shell\copyname\command" /t REG_SZ /d "cmd /c for %a in (\"%1\") do echo.%~na|clip"  /f  
----
24k爪机纯手打代码,思路写法应该没错,整体代码未经测试,图标位置瞎蒙的,有空在pc上再纠错一下,或论坛里的高手们帮忙测试纠错一下下,,,
就是启动cmd for 语法,,用%~n 获取文件名再进行复制,,要复制后缀则可以加上x,,%~nxa

就是这么简单,,
发表于 2026-3-22 14:37:45 | 显示全部楼层
发表于 2026-3-23 16:41:55 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-3-25 10:42 编辑

右键菜单实现须操作注册表,仅用批处代码对付单选文件或目录很简单,但要处理多选文件或目录就很麻烦,详情可参考老帖 https://bbs.bathome.net/forum.ph ... mp;highlight=sendto 7,9楼,以下采用其中推荐的解法,即采用右键菜单 '发送到' 选项解决多选的问题。

  1. v=WSH.arguments, ws=WSH.createObject('WScript.shell');
  2. for (a=[],n=0,l=v.length; n<l; n++) {
  3.   _a=v(n).split(/\\|\./), a[n]=_a[_a.length-2]; }
  4. a.sort(), fso=WSH.createObject('Scripting.FileSystemObject');
  5. tF=ws.expandEnvironmentStrings('%temp%')+'\\_.clipT';
  6. fp=fso.OpenTextFile(tF,2,true), fp.write(a.join('\r\n')), fp.close();
  7. ws.run('cmd.exe /c clip.exe<'+tF+'&&del/q '+tF, 0, false), WSH.quit();
复制代码

以上代码存为 复制文件名.js 文件,存放到 %appdata%\Microsoft\Windows\SendTo 目录中,其后会在右键菜单 发送到 选项中出现 复制文件名 分项,届时选用即可。
发表于 2026-3-23 22:49:06 | 显示全部楼层
aloha20200628 发表于 2026-3-23 16:41
右键菜单实现须操作注册表,仅用批处代码对付单选文件或目录很简单,但要处理多选文件或目录就很麻烦,详情 ...

发送方式不失为一种写法,但毕竟不是注册表操作,
其实也有其他写法的 ,就是历遍文件后扔>临时文件里,再CLIP<TEMP,再DEL TEMP
也可以在历遍的时候 CALL SET 叠加然后用其他语法拆解替换成回车符,用MSHTA 调用VBS & JS 语法把叠加字符替换成CHR(10)?。。
呵,,只要思想不滑坡,什么稀奇古怪的写法都能被制造出来的,。。
思路是有的,不过最近忙,也懒得写,,,
发表于 2026-3-24 05:45:56 | 显示全部楼层
aloha20200628 发表于 2026-3-23 16:41
右键菜单实现须操作注册表,仅用批处代码对付单选文件或目录很简单,但要处理多选文件或目录就很麻烦,详情 ...
  1. For /l %%i in (1,1,9) do Call Set a=%%a%%"%%i"+Chr(10)+
  2. Set a=%a:~0,-9%
  3. MsHta "Vbscript:Msgbox(%a%)(Close)"
复制代码

,随手写来玩的,,,,,,,,,,,,
发表于 2026-3-24 12:17:20 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-3-24 13:58 编辑
jiavip 发表于 2026-3-23 22:49
发送方式不失为一种写法,但毕竟不是注册表操作,
其实也有其他写法的 ,就是历遍文件后扔>临时文件里, ...


   再强调一遍,与在cmd窗口中跑批处代码获取 %* 的方式不同,在注册表 command 项注入批处代码的麻烦是处理右键多选的结果,且不论此处不认 %*,且不论其会连续打开 n 多个窗口,闪屏一串,而对每个窗口进程只分配一个选择项(文件或目录),关键是窗口连续打开数量过多,有时会卡死资源浏览器... 建议还是看一下4楼引用的链接知其缘由。
   国内外码农用批处代码开山辟路的历史已有40年了,一路走来,多少坑多少雷,也熬出多少良方妙策,奇技淫巧。后来者未知未行之多,其实很容易在中外网坛等老帖中获解或有所汲取,而借助当下的 AI 则更是开工快进的一大利器...
   本坛有人喜欢用编程界名言 Talk is cheap. Show me the code 作为签字留言,大家与之共勉吧...
发表于 2026-3-24 20:08:28 来自手机 | 显示全部楼层
aloha20200628 发表于 2026-3-24 12:17
再强调一遍,与在cmd窗口中跑批处代码获取 %* 的方式不同,在注册表 command 项注入批处代码的麻烦是 ...

额,理解不同吧!,,
我也没说要 多选 啊,,也没说要用到%* 啊,,,
我的思路是这样的,,
点选一文件或文件夹,判断是文件还是文件夹,,
文件则 %~dp,历遍当前目录及子目录文件,输出到>临时文件倒手,然后clip<,,,复制
文件夹 则返回上一目录,,再,,操作,,
理论上来说是可行的啊,
 楼主| 发表于 2026-3-25 09:09:36 | 显示全部楼层
谢谢各位大神回复,看得有点迷糊。我的初衷确实是想在某个文件夹下,多选某几个文件,再复制文件名(且是去除后缀名的),然后再用其他办法以顿号将各文件名连起来,粘贴到文案中。虽然还是不知道该怎么做,但还是谢谢各位!
发表于 2026-3-25 10:40:19 | 显示全部楼层
xfcsf 发表于 2026-3-25 09:09
谢谢各位大神回复,看得有点迷糊。我的初衷确实是想在某个文件夹下,多选某几个文件,再复制文件名(且是去 ...


先依照4楼完成所述操作步骤,然后在某文件夹中选定多个文件,立即右键,在右键菜单中找到 '发送到' 选项,点击并选其中的 '复制文件名.js' 即可,其后用右键 '粘贴' 获取所需结果。
发表于 2026-3-25 11:19:38 | 显示全部楼层
xfcsf 发表于 2026-3-25 09:09
谢谢各位大神回复,看得有点迷糊。我的初衷确实是想在某个文件夹下,多选某几个文件,再复制文件名(且是去 ...

再给一个不用注册表的批处版本。以下代码存为 复制文件名.bat,放到桌面成 '复制文件名' 图标即可,每次选择多个文件时直接拖拽给这个桌面图标即可实现楼主所求...

  1. @echo off &if "%~1"=="" (set/p="用法》右键直接拖拽多个已选文件给本脚本即可...回车键退出" &exit/b)
  2. if "%~1" neq "/" ("%~f0" "/" %*|sort|clip &exit/b)
  3. for %%F in (%*) do if "%%~F" neq "/" echo,%%~nF
  4. exit/b
复制代码
发表于 2026-3-27 07:21:06 | 显示全部楼层
本帖最后由 jiavip 于 2026-3-27 07:49 编辑
aloha20200628 发表于 2026-3-25 11:19
再给一个不用注册表的批处版本。以下代码存为 复制文件名.bat,放到桌面成 '复制文件名' 图标即可,每次 ...


纯注册表写出来了,可以多选文件和文件夹,并复制文件名,但是有纰漏,不能复选超过 15个文件+文件夹
而且只能在桌面进行多选复制操作,文件夹下只能复制被点中的那个,其他被复选的不能复制,,,
如果超过15个右键项目会变成 只有 CLSID 才支持的项目,要另写 DLL,,不会,,
WIN10 系统,,,
思路很简单,FOR 把文件名写入>> 临时文件 && TIMEOUT 3 && IF EXIST 临时文件 (CLIP<临时文件&&DEL 临时文件) ELSE EXIT &&  MSHTA MSGBOX 提示窗口
不成熟写法,瑕疵一大堆,就不发布出来,,,
---------
可以修改注册表设置 突破这个 15个文件数目的限制,上限可以突破几千个文件,,,,,但,,那又是另一话说了,,,
那样又会碰到一个问题,写入时间会更加长,延迟等待再加时间,不一定能完整复制所有复选的文件+文件夹名,,,,,,,,,,,
发表于 2026-3-27 08:04:06 | 显示全部楼层
本帖最后由 523066680 于 2026-3-27 11:14 编辑

这种需求我一般都是写个剪切板工具, 操作流程:
* 对文件Ctrl+C
* 双击脚本/或者通过终端调用的方式
   - 如果查询到剪切板里面有文件列表, 转为文本, 重写剪切板.

对多个文件 Ctrl+C, 可以获得多个文件名的文本, 路径信息可选, 也不算繁琐.
我有个批量重命名 rnfiles.pl 就是这么做的, 放在path环境随时调用.
发表于 2026-3-27 10:17:03 | 显示全部楼层
新人过来就是学习,谢谢
发表于 2026-3-28 01:02:27 | 显示全部楼层
523066680 发表于 2026-3-27 08:04
这种需求我一般都是写个剪切板工具, 操作流程:
* 对文件Ctrl+C
* 双击脚本/或者通过终端调用的方式

花了好几局游戏的时间,终于把脚本写好了!
按照你说的思路,对多个文件 Ctrl+C, 然后 如果查询到剪切板里面有文件列表, 转为文本显示输出 & 重写剪切板
可选注册表添加 各个文件夹内和桌面 右键 显示\重写剪切板 ,,
三种模式可选  1.文件名   2.文件名+后缀   3.完整路径
可选 安装桌面快捷方式【复制_文件名】【复制_文件名.后缀】【复制_完整路径】
5456516.png 2026-03-28_00-57-19_3769199.png

脚本还做打磨中,困了,先玩会游戏,,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-4-21 17:06

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表