tmkmk 发表于 2011-4-24 11:36:07

麻烦大了。如何提取CMD窗口的所有文字。非(stdout)以解决

本帖最后由 tmkmk 于 2011-4-24 12:30 编辑

如题。通过StdoutRead不能实现我的操作。我所做的操作是一个连续操作.在CMD窗口中的一个连续性操作.比如说 我执行
diskpart
list vol
到这里了以后会给出硬盘分区的一些信息.如下面
卷 ###Ltr标签      Fs   类型      大小   状况   信息
---------------------------------------------------------------
卷 0   F                     DVD-ROM         0 B
卷 1   G                     DVD-ROM         0 B
卷 2   C                NTFS   磁盘分区          15 GB状态良好       系统

卷 3   D                NTFS   磁盘分区          98 GB状态良好

卷 4   E                NTFS   磁盘分区          37 GB状态良好

现在问题来了.如果插入移动硬盘.而每次执行diskpart后,卷标号都不一样.会变动的.有时候在0位置有时候在1.有时候又跑到最后.所以我需要把这里面的信息给提取出来.然后在程序里分析.最后发送send命令在CMD窗口里操作.而不能执行run

问题解决了,可是不知道怎么设置

the886 发表于 2011-4-24 12:09:00

本帖最后由 the886 于 2011-4-24 12:10 编辑

把命令结果保存到txt 在用AU3 正则等读取txt

首先你要说你要达到什么目的,这样人家才好帮你

tmkmk 发表于 2011-4-24 12:26:13

汗~写清楚了啊.不过自己找到解决方法了,附上源码,供其他新手参考;Run("cmd")
WinWait("")
WinActivate("")
Send("dir{ENTER}")
$array=WinGetPos ("")
$hx="X坐标:"&$array&@CRLF&"Y 坐标:"&$array&@CRLF&"宽度"&$array&@CRLF&"高度"&$array
MouseMove($array+7,$array+25)
MouseClick("right")
Send("k")
MouseClickDrag("left",$array+7,$array+25,$array-25+$array,$array-10+$array)
;MouseMove($array-30+$array,$array-10+$array)
MouseClick("right")
MsgBox(0,"X坐标",$hx)
$xx=ClipGet()
MsgBox(0,"X坐标",$xx)
WinActivate("")
Send("exit{ENTER}")

easefull 发表于 2011-4-24 12:28:03

不太明白stdout流,不过下面的代码你可以试试#include <Constants.au3>

FileWrite("C:\diskpart.txt", "list vol")
Local $foo = Run(@ComSpec & " /c diskpart /s C:\diskpart.txt", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
Local $sResult
While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
        MsgBox(0, "调试", $line)
        $sResult &= $line
Wend
MsgBox(0, "结果", $sResult)
FileDelete("C:\diskpart.txt")

502762378 发表于 2011-4-24 12:29:09

回显的内容直接判断你要得到盘符的信息

tmkmk 发表于 2011-4-24 12:32:35

我要的不只是回执,回执无法实现.我里面说的很清楚了.需要在当前cmd里面操作的

netegg 发表于 2011-4-25 15:50:56

回复 6# tmkmk
stdout之后再用stdin呗
页: [1]
查看完整版本: 麻烦大了。如何提取CMD窗口的所有文字。非(stdout)以解决