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

[注册表类] [已解决]把批处理改为用右键写入注册表键值里去执行,有些命令会不被被执行吗,如for

[复制链接]
发表于 2023-2-2 21:27:28 | 显示全部楼层 |阅读模式
本帖最后由 lforl 于 2023-2-4 13:10 编辑

【案例】右键文件夹实现:根据指定列表文本,给指定文件名加上前缀字符:

文件夹“book Zip Test”里有以下文件:
F:\book Zip Test\noPsw03.zip
F:\book Zip Test\noPsw04.zip
F:\book Zip Test\Psw01.zip
F:\book Zip Test\Psw02.zip
F:\book Zip Test\Psw03.zip
F:\book Zip Test\Psw04.zip
F:\book Zip Test\Psw05.zip
F:\book Zip Test\Psw06is.zip
F:\book Zip Test\sub floder\zip test.zip
F:\book Zip Test\sub floder\noPsw01.zip
F:\book Zip Test\sub floder\noPsw02.zip
列表文本“zipList.txt”内容为:

  1. F:\book Zip Test\noPsw04.zip
  2. F:\book Zip Test\Psw01.zip
  3. F:\book Zip Test\Psw02.zip
  4. F:\book Zip Test\sub floder\zip test.zip
复制代码
右键文件夹,根据以上列表内容,修改文件名为:
F:\book Zip Test\(已加密)noPsw04.zip
F:\book Zip Test\(已加密)Psw01.zip
F:\book Zip Test\(已加密)Psw02.zip
F:\book Zip Test\sub floder\(已加密)zip test.zip

我写了一个zipRename.bat:
  1. for /f "tokens=*" %%i in (zipList.txt) do (ren "%%i" "(已加密)%%~nxi")
复制代码
然后用注册表调用这个bat,实现右键改名,是可以的:

  1. [HKEY_CLASSES_ROOT\Directory\shell\copypath\command]
  2. @="cmd.exe /K cd /d %L &zipRename.bat &exit"
复制代码
---------
问题:如果我抛弃中间bat,直接将那行for循环,写入到注册表,右键使用,没有执行,也没报错,为何?

  1. [HKEY_CLASSES_ROOT\Directory\shell\copypath\command]
  2. @="cmd.exe /K cd /d %L &for /f "tokens=*" %%i in (zipList.txt) do (ren "%%i" "(已加密)%%~nxi")&exit"
复制代码
批处理放到注册表键值里去执行,仅局限部分命令有效吗?

我发现在不同环境里,参数的写法不一样:

在cmd窗口中:for %I in (command1) do command2
在批处理文件中:for %%I in (command1) do command2
在注册表键值中:for %%I in (command1) do command2


把批处理改为用右键(写入注册表键值里)去执行,为什么有些命令就没效果,比如for
是不是很多批处理文件,都不能写入注册表键值中,用右键执行?

把批处理改为用reg(写入注册表键值里)做一个右键菜单去执行,有什么改写规则吗?
已知的比如有:
* 引号要加斜杠\转义
* 换行(两个命令之间)要用&链接
* win7下%1可以代表当前文件夹,win10下要改为%L才有效果。
......
这个帖子就提到几个参数的变化
发表于 2023-2-3 22:16:26 | 显示全部楼层
本帖最后由 WHY 于 2023-2-3 22:19 编辑

@="cmd.exe /K cd /d %L &for /f \"tokens=*\" %%i in (zipList.txt) do (ren \"%%i\" \"(已加密)%%~nxi\")&exit"
这个括弧位置不对,执行一次 ren 就会退出CMD。
改成这样:
@="cmd.exe /K cd /d %L &(for /f \"tokens=*\" %%i in (zipList.txt) do ren \"%%i\" \"(已加密)%%~nxi\")&exit"
win7、win10测试没有问题。

评分

参与人数 1技术 +1 收起 理由
lforl + 1 的确如此,非常感谢!问题解决!

查看全部评分

发表于 2023-2-4 08:59:03 | 显示全部楼层
回复 1# lforl


win7下%1可以代表当前文件夹,win10下要改为%L才有效果。

不管什么系统,不管在哪里(bat/cmd/reg)使用,for循环的控制变量建议都使用字母而不是数字。
 楼主| 发表于 2023-2-4 12:45:54 | 显示全部楼层
本帖最后由 lforl 于 2023-2-4 13:11 编辑

非常感谢@WHY 、@Batcher帮助与点评!学到了,问题解决!看来所有的批处理,只要编写得当,都可以写入注册表里用右键去执行!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 05:09 , Processed in 0.018485 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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