nbmpe 发表于 2010-10-15 08:42:11

DOS在AU3中延时问题(已解决)

本帖最后由 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后的参数要根椐变华的不同而不同..
请个位大侠支招!]


<分类问题> 中没见已解决。

3mile 发表于 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

republican 发表于 2010-10-15 09:52:49

延时:
ping 127.0.0.1 -n 20

menfan1 发表于 2010-10-15 10:01:46

也有调用sleep.exe实现的

nbmpe 发表于 2010-10-15 10:15:34

初步测试,还是不行,读不出来。

3mile 发表于 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)

republican 发表于 2010-10-15 10:31:33

话说,3mile兄为什么想要回显呢?

nbmpe 发表于 2010-10-15 10:49:22

你那样是返回,命令执行的结果,是可以的,我要的返回码。就不返回了。你可以找个有返回码的小软件试下。

3mile 发表于 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)

nbmpe 发表于 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"))

My2009 发表于 2012-6-11 09:26:29

{:face (332):}
页: [1]
查看完整版本: DOS在AU3中延时问题(已解决)