中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助] 如何将命令行输出的某些行赋值于变量?
作者:
标题: [求助] 如何将命令行输出的某些行赋值于变量? 上一主题 | 下一主题
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『楼 主』:  [求助] 如何将命令行输出的某些行赋值于变量?

使用命令行
DEVCON FIND USB\*
显示出如下信息:

  Quote:
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.

请问如何提取这两行:

  Quote:
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 ?
set A=VID_0A81&PID_0205
set B=VID_1130&PID_F211
请尽量不使用过渡文件,谢谢!

[ Last edited by chishingchan on 2008-1-17 at 04:52 AM ]

2008-1-17 04:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 2 楼』:  

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-dos.net/forum/viewthread.php?tid=35139&fpage=1



第一高手    第二高手

2008-1-17 13:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 3 楼』:  



  Quote:
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
[url]http://www.cn-d ...

对 DEVCON 又长见识了,谢谢!不过好像不对题啊!?

我觉得此问题只是FOR的应用不够理解而已:是两个变量赋值,单个变量赋值我是会的,两个以上我就不太会.请不要再贴些让我学习的贴子,难道帮忙列个命令行就那么难吗?

2008-1-17 22:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 4 楼』:  

只有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 ]

2008-1-18 11:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 5 楼』:  



  Quote:
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  ...

谢谢!符合题意!

以上代码改成如下:
@echo off
for /f "tokens=2 delims=\\" %%A in ('DEVCON FIND USB\* ^|findstr Composite') do set B="%%A"
for /f "tokens=2 delims=\\" %%A in ('DEVCON FIND USB\* ^|findstr Composite^|findstr ^/V %B%') do set A="%%A"
echo %A%
echo %B%
pause
显示结果:

  Quote:
"VID_0A81&PID_0205"
"VID_1130&PID_F211"
请按任意键继续. . .

请问如何取消变量值的两侧冒号?

2008-1-18 15:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  


@echo off
for /f "tokens=1,2 delims=\" %%i in ('devcon find usb\*^|find /i "Composite Device"') do call :xxx "%%i\%%j"
echo "%A%" "%B%"
pause

:xxx
if "%~1"=="" goto:eof
if "%A%"=="" (set "A=%~1") else (set "B=%~1")
goto:eof




第一高手    第二高手

2008-1-18 16:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 7 楼』:  

楼主不用研究我那个笨法子了,楼上高手出手了。我先学习学习。

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

[ Last edited by dooomer on 2008-1-18 at 04:45 PM ]

2008-1-18 16:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 8 楼』:  

那个“\”要取决于for tokens=1,2 delims=\参数而定



第一高手    第二高手

2008-1-18 18:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 9 楼』:  

谢谢,我再仔细看看for的帮助。

2008-1-19 12:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 10 楼』:  

以下代码算是可以了。谢谢以上各位的解答!
@echo off
for /f "tokens=3,5 delims=\_&" %%a in ('DEVCON FIND HID\* ^|FIND "Keyboard"') do set var=%%a%%b
echo %var%
PAUSE
显示结果:
0A810205
请按任意键继续. . .

我的意思是找出USB to PS2 x 2 的代码值回写到某个文件内的(破解BeTwin拖机软件用),请问有没有这样的工具可以写入代码到某个文件内的(CMD环境)?

2008-1-19 18:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 11 楼』:  

找到一个工具是:change

但不知格式如何,因为按照说明例子列出命令行时,还是提示手工输入参数。

2008-1-21 00:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 12 楼』:  

我不了解BeTwin,说明下要求吧
如果是USB鼠标你可以devcon find USB\Class_03\*



第一高手    第二高手

2008-1-21 00:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 13 楼』:  

其实就是找一个支持16进制代码改写二进制文件的一个能够运行在CMD环境下的命令行工具!

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

hexc 好像不支持cmd

[ Last edited by chishingchan on 2008-1-21 at 10:21 PM ]

2008-1-21 22:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 14 楼』:  

请问这种工具谁能提供一下呀?都很久了,怎么没人理?

2008-1-26 11:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: