注册表中%1与%*对批处理参数传递的影响

http://bathome.net/archiver/tid-9794.html

hfg1977 发表于 2010-10-29 05:11

注册表中%1与%*对批处理参数传递的影响

注册表中%1与%*对bat文件参数传递的影响
[color=blue]目的[/color]: 把bat加到右键菜单,多选文件时,把多个文件作为参数传给bat; (不采用拖放)
[color=blue]遇到问题[/color]: 以 %1 传递会打开多个cmd窗口同步运行bat,而不是把"多个文件"传递给一个窗口运行bat.
                以 %*  传递会导致参数传递失败. (同样打开了多个cmd窗口同步运行bat)
[color=blue]期望[/color]: 大家把测试结果交流一下,都是哪种情况. 以便知道是个人系统问题还是普遍现象.
[color=blue]测试方法[/color]: 先空运行一次bat'再 单选\多选JPG图片,右键菜单"JPG图片测试" 运行.

测试代码如下:[code]@echo off
goto:end 控制更改注册表,下次生效,顶端加 rem 注释掉
:start ===================================================
for /f "skip=4 tokens=3" %%a in ('REG QUERY "HKLM\Software\hf'file" /v resize_pic 2^>nul') do set KEY_v=%%a
if "%KEY_v%" EQU "1" (
reg add "HKLM\SOFTWARE\Classes\jpegfile\shell\JPG图片测试&J\command" /ve /d "\"%~f0\" \"%%1\"" /f>nul
reg add "HKLM\Software\hf'file" /v resize_pic /d 2 /f>nul
) else (
reg add "HKLM\SOFTWARE\Classes\jpegfile\shell\JPG图片测试&J\command" /ve /d "\"%~f0\" %%*" /f>nul
reg add "HKLM\Software\hf'file" /v resize_pic /d 1 /f>nul
)
:end ======================================================
for /f "skip=4 tokens=3" %%a in ('REG QUERY "HKLM\Software\hf'file" /v resize_pic 2^>nul') do set KEY_v=%%a
if "%KEY_v%" EQU "1" (echo 测试参数%%* :) else (echo 测试参数%%1 :)
echo %%1=%1
echo %%2=%2
echo %%*=%*
pause
exit /b[/code]PS: 原来的系统没有这种问题,打了补丁就出问题了. 又做了一遍雨林木风的.

[[i] 本帖最后由 hfg1977 于 2010-10-29 05:21 编辑 [/i]]

cjiabing 发表于 2011-4-15 14:38

[b] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=63449&ptid=9794]1#[/url] [i]hfg1977[/i] [/b]

原来也有人关注过!~

似乎是这样的,你点击每个文件使用右键时,该参数是传递给每个文件的,而并非共享到一个文件中。
但是,可以使用其它拐弯抹角的办法吧,比如统一写到一个文本中,然后再处理这个文本。
但这个问题仍然没有解决,就是你每写入一次,它就弹出一次那个黑框框框。
这个似乎是硬伤,那就是,每个文件上面的%1和%*都是独立分配给每个文件的,不能像WMplayer一样,一次性将多个歌曲导入播放,而不会显示N多个wmplayer窗口。

想到一个问题,右键——将数据传输到当前CMD.EXE窗口,兄弟弄一下看得吗?
rem hkcr   "\"……\"         是个好东西,以前早发现你的帖就好了,不过俺无师自通了。

cjiabing 发表于 2011-4-15 14:42

[i=s] 本帖最后由 cjiabing 于 2011-4-15 14:45 编辑 [/i]

顺便把我的batmplayer用的内容给你分享一下,注意看,程序上的只能用%1,而不能用%*,目录上的则相反。
”F /s %%1”是我的播放器的搜索参数,具体你找我发的batmplayer看看。[code]
reg add HKCR\AudioCD\shell\open\command /t REG_SZ /ve /f /d "\"%##%\" %%1 %%*
reg add HKCR\AudioCD\shell\PlayList /t REG_SZ /ve /f /d  添加到BatMPlayer播放列表
reg add HKCR\AudioCD\shell\PlayList\command /t REG_SZ /ve /f /d "cmd /c echo;"%%1" %%*>>"\"%##0%PlayList\PL.txt\"
reg add HKCR\Directory\shell\Playback /t REG_SZ /ve /f /d 使用BatMPlayer搜索
reg add HKCR\Directory\shell\Playback\command /t REG_SZ /ve /f /d "\"%##%\" F %%*"
reg add HKCR\Audio.mp3\shell\Playlist /t REG_SZ /ve /f /d 使用BatMPlayer搜索
reg add HKCR\Audio.mp3\shell\Playlist\command /t REG_SZ /ve /f /d "\"%##%\" F /s %%1"
reg add HKCR\Audio.mp3\shell\Playback /t REG_SZ /ve /f /d 使用BatMPlayer打开
reg add HKCR\Audio.mp3\shell\Playback\command /t REG_SZ /ve /f /d "\"%##%\" %%1 %%*
reg add HKCR\Audio.mp3\shell\addtoPlaylist /t REG_SZ /ve /f /d  加入BatMPlayer播放列表
reg add HKCR\Audio.mp3\shell\addtoPlaylist\command /t REG_SZ /ve /f /d "cmd /c echo;"%%1" %%*>>"\"%##0%PlayList\PL.txt\"
reg add HKCR\txtfile\shell\print\ /t REG_SZ /ve /f /d 使用BatMPlayer朗读
reg add HKCR\txtfile\shell\print\command /t REG_SZ /ve /f /d "\"%##%\" BY %%1 %%*"

[/code]

hfg1977 发表于 2011-4-15 19:27

这么老的贴被翻上来了呀,--------恩,所谓的"挖坟".
[quote]想到一个问题,右键——将数据传输到当前CMD.EXE窗口,兄弟弄一下看得吗?[/quote]
这个问题思路是有的,还没方法.
1. 建立一个bat 或 EXE 程序,关联到Explorer的右键;
2. 上述程序获得Explorer的右键发送的信息, 枚举所有窗口找到另一个可见的CMD窗口(即你说的当前CMD.EXE窗口,其实它并不是当前窗口,它已经失去焦点了),将信息MSG转发给它,MSG可以加上回车符让它自动运行.
3.如果没找到"另一个可见的CMD窗口"就新建一个(这个简单);

这个思路关键在于CMD窗口对消息的接受与处理,我们并不是很清楚,需要做实验.
bat(包括第三方命令行工具)对于发送MSG消息还是很不给力的,这是其自身的缺陷无法改变.
所以实验需要用高级语言来实现.

cjiabing 发表于 2011-4-16 01:28

[b][url=http://www.bathome.net/redirect.php?goto=findpost&pid=75583&ptid=9794]4#[/url] [i]hfg1977[/i] [/b]
用VBS应该可以,上次见过一个好玩的东东!~
批处理与程序进行数据传递方面不怎么讨好,感觉批处理无法深入地对系统窗口进行操作,vbs在这方面则很强。

slore 发表于 2011-4-16 13:18

DDE

%啥无关系。。。
都传了。

1.千千个人感觉貌似也启动了吧。自己程序处理发现有已经运行的,进程间通讯手段很多,把
参数传给已经打开的程序再处理

2.DDE
程序启动注册一个系统DDE服务,然后右键的时候系统会将参数传给注册DDE服务的程序,
这种程序启动好像是一次,内部写个回调函数处理系统发的消息就是了。

但是2个方案都是要程序去处理下的。。。关键是程序,注册表关联没办法。。。
建议你的需求就“发送到。。。”吧 

页:  [1]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值