本帖最后由 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”内容为:- 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
复制代码 右键文件夹,根据以上列表内容,修改文件名为:
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:- for /f "tokens=*" %%i in (zipList.txt) do (ren "%%i" "(已加密)%%~nxi")
复制代码 然后用注册表调用这个bat,实现右键改名,是可以的:- [HKEY_CLASSES_ROOT\Directory\shell\copypath\command]
- @="cmd.exe /K cd /d %L &zipRename.bat &exit"
复制代码 ---------
问题:如果我抛弃中间bat,直接将那行for循环,写入到注册表,右键使用,没有执行,也没报错,为何?- [HKEY_CLASSES_ROOT\Directory\shell\copypath\command]
- @="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才有效果。
......
这个帖子就提到几个参数的变化 |