Board logo

标题: [求助] 如何将命令行输出的某些行赋值于变量? [打印本页]

作者: chishingchan     时间: 2008-1-17 04:27    标题: [求助] 如何将命令行输出的某些行赋值于变量?

使用命令行
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 ]
作者: fastslz     时间: 2008-1-17 13:17
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
作者: chishingchan     时间: 2008-1-17 22:40


  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的应用不够理解而已:是两个变量赋值,单个变量赋值我是会的,两个以上我就不太会.请不要再贴些让我学习的贴子,难道帮忙列个命令行就那么难吗?
作者: dooomer     时间: 2008-1-18 11:57
只有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 ]
作者: chishingchan     时间: 2008-1-18 15:40


  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"
请按任意键继续. . .

请问如何取消变量值的两侧冒号?
作者: fastslz     时间: 2008-1-18 16:08

@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

作者: dooomer     时间: 2008-1-18 16:38
楼主不用研究我那个笨法子了,楼上高手出手了。我先学习学习。

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

[ Last edited by dooomer on 2008-1-18 at 04:45 PM ]
作者: fastslz     时间: 2008-1-18 18:21
那个“\”要取决于for tokens=1,2 delims=\参数而定
作者: dooomer     时间: 2008-1-19 12:30
谢谢,我再仔细看看for的帮助。
作者: chishingchan     时间: 2008-1-19 18:36
以下代码算是可以了。谢谢以上各位的解答!
@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环境)?
作者: chishingchan     时间: 2008-1-21 00:02
找到一个工具是:change

但不知格式如何,因为按照说明例子列出命令行时,还是提示手工输入参数。
作者: fastslz     时间: 2008-1-21 00:59
我不了解BeTwin,说明下要求吧
如果是USB鼠标你可以devcon find USB\Class_03\*
作者: chishingchan     时间: 2008-1-21 22:16
其实就是找一个支持16进制代码改写二进制文件的一个能够运行在CMD环境下的命令行工具!

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

hexc 好像不支持cmd

[ Last edited by chishingchan on 2008-1-21 at 10:21 PM ]
作者: chishingchan     时间: 2008-1-26 11:43
请问这种工具谁能提供一下呀?都很久了,怎么没人理?