中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 09:23
48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助] 如何将命令行输出的某些行赋值于变量?
可打印版本  1,363 / 13
第1楼 chishingchan 发表于 2008-01-17 04:27
银牌会员 发帖 538 积分 1,284
[求助] 如何将命令行输出的某些行赋值于变量?
使用命令行

显示出如下信息:
USB\ROOT_HUB\4&1A8F66BB&0 : USB Root Hub
USB\ROOT_HUB\4&2D491760&0 : USB Root Hub
USB\ROOT_HUB\4&467FDFE&0 : USB Root Hub
USB\ROOT_HUB\4&7D5B616&0 : USB Root Hub
USB\ROOT_HUB20\4&2556A5A7&0 : USB Root Hub
USB\VID_04A9&PID_106A\408Q9I : USB Printing Support
USB\VID_0A81&PID_0205\5&11CCBFD0&0&2 : USB Composite Device
USB\VID_0A81&PID_0205&MI_00\6&DE85D78&0&0000 : USB USB\VID_0A81&PID_0205&MI_01\6&DE85D78&0&0001 : USB USB\VID_0AC8&PID_307B\5&39E0BBF6&0&2 : USB PC Camera (ZS0211)
USB\VID_1130&PID_F211\5&11CCBFD0&0&1 : USB Composite Device
USB\VID_1130&PID_F211&MI_00\6&2BDBF2D1&0&0000 : USB Audio Device
USB\VID_1130&PID_F211&MI_03\6&2BDBF2D1&0&0003 : USB USB\VID_1130&PID_F211&MI_04\6&2BDBF2D1&0&0004 : USB 14 matching device(s) found.


请问如何提取这两行:
USB\VID_0A81&PID_0205\5&11CCBFD0&0&2 : USB Composite Device
USB\VID_1130&PID_F211\5&11CCBFD0&0&1 : USB Composite Device

然后赋值给变量 A 和 B ?


请尽量不使用过渡文件,谢谢!

[ Last edited by chishingchan on 2008-1-17 at 04:52 AM ]
第2楼 fastslz 发表于 2008-01-17 13:17
铂金会员 发帖 2,315 积分 5,493 来自 上海
第3楼 chishingchan 发表于 2008-01-17 22:40
银牌会员 发帖 538 积分 1,284
Originally posted by fastslz at 2008-1-17 01:17 PM:
http://www.cn-dos.net/forum/viewthread.php?tid=34906&fpage=1
『第 5 楼』:

http://www.cn-dos.net/forum/viewthread.php?tid=37059&fpage=2
http://www.cn-d ... 对 DEVCON 又长见识了,谢谢!不过好像不对题啊!? 我觉得此问题只是FOR的应用不够理解而已:是两个变量赋值,单个变量赋值我是会的,两个以上我就不太会.请不要再贴些让我学习的贴子,难道帮忙列个命令行就那么难吗?
第4楼 dooomer 发表于 2008-01-18 11:57
初级用户 发帖 52 积分 109
只有2个变量的话,可以这么办:

DEVCON FIND USB\*>ininin.txt
for /f "tokens=2 delims=\\" %%A in ('type ininin.txt^|findstr Composite') do set B="%%A"
for /f "tokens=2 delims=\\" %%A in ('type ininin.txt^|findstr Composite^|findstr ^/V %B% ') do set A="%%A"
echo %A%
echo %B%
pause

编辑:楼主自行把生成临时文件的重定向给取消吧。这里只是提供一个思路。如果是3个或以上变量,可以依照这个思路再往下写。当然这个办法是比较笨一些了。

[ Last edited by dooomer on 2008-1-18 at 12:03 PM ]
第5楼 chishingchan 发表于 2008-01-18 15:40
银牌会员 发帖 538 积分 1,284
Originally posted by dooomer at 2008-1-18 11:57 AM:
只有2个变量的话,可以这么办:

DEVCON FIND USB\*>ininin.txt
for /f "tokens=2 delims=\\" %%A in ('type ininin.txt^|findstr Composite') do set B="%%A"
for /f ...


谢谢!符合题意!

以上代码改成如下:


显示结果:
"VID_0A81&PID_0205"
"VID_1130&PID_F211"
请按任意键继续. . .


请问如何取消变量值的两侧冒号?
第6楼 fastslz 发表于 2008-01-18 16:08
铂金会员 发帖 2,315 积分 5,493 来自 上海
第7楼 dooomer 发表于 2008-01-18 16:38
初级用户 发帖 52 积分 109
楼主不用研究我那个笨法子了,楼上高手出手了。我先学习学习。

编辑:楼上能否给讲讲call后面两个参数中间的“\”的作用?不知哪里能找到相关资料呢?

[ Last edited by dooomer on 2008-1-18 at 04:45 PM ]
第8楼 fastslz 发表于 2008-01-18 18:21
铂金会员 发帖 2,315 积分 5,493 来自 上海
那个“\”要取决于for tokens=1,2 delims=\参数而定
第9楼 dooomer 发表于 2008-01-19 12:30
初级用户 发帖 52 积分 109
谢谢,我再仔细看看for的帮助。
第10楼 chishingchan 发表于 2008-01-19 18:36
银牌会员 发帖 538 积分 1,284
以下代码算是可以了。谢谢以上各位的解答!


显示结果:
0A810205
请按任意键继续. . .

我的意思是找出USB to PS2 x 2 的代码值回写到某个文件内的(破解BeTwin拖机软件用),请问有没有这样的工具可以写入代码到某个文件内的(CMD环境)?
第11楼 chishingchan 发表于 2008-01-21 00:02
银牌会员 发帖 538 积分 1,284
找到一个工具是:change

但不知格式如何,因为按照说明例子列出命令行时,还是提示手工输入参数。
第12楼 fastslz 发表于 2008-01-21 00:59
铂金会员 发帖 2,315 积分 5,493 来自 上海
我不了解BeTwin,说明下要求吧
如果是USB鼠标你可以devcon find USB\Class_03\*
第13楼 chishingchan 发表于 2008-01-21 22:16
银牌会员 发帖 538 积分 1,284
其实就是找一个支持16进制代码改写二进制文件的一个能够运行在CMD环境下的命令行工具!

只是个例子:hexc filename.exe "04B48328" "0A810205"

hexc 好像不支持cmd

[ Last edited by chishingchan on 2008-1-21 at 10:21 PM ]
第14楼 chishingchan 发表于 2008-01-26 11:43
银牌会员 发帖 538 积分 1,284
请问这种工具谁能提供一下呀?都很久了,怎么没人理?
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023