如何读取文本里指定部分的字符串?
Microsoft iSCSI Initiator version 2.0 Build 1653Total of 1 sessions
Session Id : ffffffff8215b47c-4000013700000004
Initiator Node Name : iqn.1991-05.com.microsoft:0104
Target Node Name : (null)
Target Name : iqn.2005-02.com.ricecake.iscsi:00
ISID : 40 00 01 37 00 00
TSID : f5 2e
Number Connections : 1
Connections:
Connection Id : ffffffff8215b47c-3
Initiator Portal: 0.0.0.0/2948
Target Portal : 192.168.1.253/3260
CID : 01 00
这是ISCS运行iscsicli sessionlist /?命令得到的内容,我要读取含有“Session Id”这个字符串的内容,也就是Session Id : ffffffff8215b47c-4000013700000004该怎么写,ISCSI的版本不同,输出内容的行数也不定哦,别想用Filereadline这个函数。还有就是没断开一次生成的“Session Id ”都不同
如果有可能麻烦看下可不可以把下面两个批处理内容转换成AU3代码
① iscsicli sessionlist|find "Session Id">C:\SID.txt
基本意思:运行iscsicli sessionlist得到上面显示的内容,Find查找“Session Id”这个字符串,然后把“Session Id”这行的内容输出。
② for /f "usebackq delims=: tokens=2" %%i in (`iscsicli SessionList^|find /i "Session Id"`) do iscsicli LogoutTarget %%i
这个高手应该看得懂 ,我也不好怎么解释了,表达能力有限
[ 本帖最后由 jxpxfeiw 于 2009-3-3 10:17 编辑 ] 晕 好麻烦,谁有好的方法啊
[ 本帖最后由 jxpxfeiw 于 2009-3-2 20:59 编辑 ] #include <Constants.au3>
Local $foo = Run(@ComSpec & " /c iscsicli sessionlist ", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDOUT read:", $line)
Wend
While 1
$line = StderrRead($foo)
If @error Then ExitLoop
if stringInStr($line, "Session Id", 0) Then Msgbox(0, Default, $line)
Wend 机器上没iscsi客户端,没法测试.
#include <Constants.au3>
Local $foo, $line, $lines = "", $sessid
$foo = Run(@ComSpec & "/c iscsicli sessionlist /?", @SystemDir, @SW_HIDE, $STDOUT_CHILD)
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
$lines &= $line
Wend
MsgBox(0,0,$lines)
$sessid = StringRegExp($lines, "Session\sId.*\:\s(.*)", 3)
Msgbox(0, 0, $sessid)
StringRegExp($lines, "Session.Id.*\:.(.*)", 3)
这个也可以 正则匹配读取 用stringInStr函数比较两个字符串,好象没用
我自己慢慢琢磨吧。不过还是谢谢你们 好了 我已经自己解决了 很多人看帖,有答案,应该发下,一起交流啊8#
发表于 2009-3-3 10:17 | 只看该作者
好了 我已经自己解决了
就是啊,,, 回复 9# xnvnx
页:
[1]