找回密码
 加入
搜索
查看: 5245|回复: 10

[系统综合] DOS在AU3中延时问题(已解决)

  [复制链接]
发表于 2010-10-15 08:42:11 | 显示全部楼层 |阅读模式
本帖最后由 nbmpe 于 2010-10-16 13:32 编辑

在AU3中运行DOS格式如
                        RunWait(@ComSpec & " /c " & "cd D:\&start /w HH.exe -123 8.0 -456 " & IniRead($b, "bios", "1011", "00000000") & " -789 1&cls &ECHO %ERRORLEVEL%>D.TXT", "", @SW_HIDE)
其中HH.EXE是程序,-123 -456 -789 是程序的参数.参数要根椐一INI文件中的不同而不同.这个AU3可以做到,问题是:这个程序要运行20秒左右.如果用&符号连在一行,后面的%ERRORLEVEL%不管前面程序对错都是0.或只是建个空D.TXT文件.
在DOS下也是这样,但批处理下可以分行写可以.问题是:用批理写-456后的参数要根椐变华的不同而不同..
请个位大侠支招!]


<分类问题> 中没见  已解决。
发表于 2010-10-15 09:28:54 | 显示全部楼层
未作测试,慎用。
;注意:回显截取只支持Run而不是RunWait
#include <Constants.au3>
Opt("MustDeclareVars", 1)
;RunWait(@ComSpec & " /c " & "cd D:\&start /w HH.exe -123 8.0 -456 " & IniRead($b, "bios", "1011", "00000000") & " -789 1&cls &ECHO %ERRORLEVEL%>D.TXT", "", @SW_HIDE)
Local $foo, $text, $iniread
If FileExists("xxx.ini") Then
        MsgBox(0, 0, "inifile not found")
Else
        $iniread = IniRead("xxx.ini", "bios", "1011", "00000000")
        If Not @error Then
                $foo = Run(@ComSpec & " /c" & " start /w HH.exe -123 8.0 -456 " & $iniread & " -789 1", "d:\", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
                ProcessWaitClose($foo)
                $text = StdoutRead($foo)
                MsgBox(0, "STDOUT read:", $text)
                FileWrite("output.txt",$text)
        EndIf
EndIf
发表于 2010-10-15 09:52:49 | 显示全部楼层
延时:
ping 127.0.0.1 -n 20
发表于 2010-10-15 10:01:46 | 显示全部楼层
也有调用sleep.exe实现的
 楼主| 发表于 2010-10-15 10:15:34 | 显示全部楼层
初步测试,还是不行,读不出来。
发表于 2010-10-15 10:19:39 | 显示全部楼层
回复 5# nbmpe
只用以下代码测试下,可以取得回显吗?
;注意:回显截取只支持Run而不是RunWait
#include <Constants.au3>
Opt("MustDeclareVars", 1)
Local $foo, $text, $iniread
$foo = Run(@ComSpec & " /c" & " dir /s", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
ProcessWaitClose($foo)
$text = StdoutRead($foo)
MsgBox(0, "STDOUT read:", $text)
FileWrite("output.txt", $text)
发表于 2010-10-15 10:31:33 | 显示全部楼层
话说,3mile兄为什么想要回显呢?
 楼主| 发表于 2010-10-15 10:49:22 | 显示全部楼层
你那样是返回,命令执行的结果,是可以的,我要的返回码。就不返回了。你可以找个有返回码的小软件试下。
发表于 2010-10-15 11:27:39 | 显示全部楼层
回复 8# nbmpe
哦,理解错了,以为你是想要将回显内容写入文件。
返回码应该用SHELLEXECUTEWAIT来获得吧。
#include <Constants.au3>
Opt("MustDeclareVars", 1)
Local $foo, $text, $iniread
;$foo = Run(@ComSpec & " /c" & " fc g:\aa.txt test.avi /b", @ScriptDir, @SW_HIDE, 0x04 )
$foo=ShellExecuteWait("fc","g:\aa.txt aa.txt /b",@ScriptDir,"open",@SW_HIDE)
MsgBox(0,"返回码","返回码:"&$foo)

评分

参与人数 1金钱 +25 收起 理由
afan + 25

查看全部评分

 楼主| 发表于 2010-10-15 12:04:50 | 显示全部楼层
谢了:SHELLEXECUTEWAIT的确可以。
我刚想了另一种方法。有点小问题,怎么让RUN后面的程序运行完(时间20秒到1分),再读取D。TXT的内容。用RUNWAIT也不行。SLEEP掌握时间不准!
Dim $B = FileGetLongName((EnvGet("temp")) & "\B.ini")
$TEST = "D:\TEST.BAT"
FileWriteLine($TEST, "start /w h3.exe -f 10 -ha " & IniRead ($B, "BIOS", "1011", "0") & " -lo 1"&@CRLF)
FileWriteLine($TEST, "ECHO %ERRORLEVEL% > D.TXT")
Run(@ComSpec & " /c" & "TEST.BAT", "D:\", @sw_hide)
MsgBox(0, 0, FileRead("D.TXT"))
发表于 2012-6-11 09:26:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 07:55 , Processed in 0.099409 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表