如何在不使用AutoIt命令行打开新shell的情况下运行命令

时间:2012-08-14 04:03:44

标签: command-line autoit windows-shell

我目前正在AutoIt中编写命令行应用程序,并且无法将其打印回我打开它的同一命令行。我的目标是让整个程序在单个shell中运行。这是我最初尝试过的:

;myprogram.au3
$MyCommand = 'dir'
Run(@ComSpec & " /c " & $MyCommand, @SystemDir, @SW_Show)
Run(@ComSpec & " /c @echo off && echo Command completed successfully. && @echo on", @SystemDir, @SW_Show)

然后我编译并通过命令行运行它(每个代码框代表一个新的shell):

C:\Users\Matthew>myprogram.au3
C:\Users\Matthew>

打开新shell    ↓

Volume in drive C has no label.
Volume Serial Number is 0287-990C
Directory of C:\Users\Matthew
<Finishes normal dir command output>

完成后,列出我目录中退出的文件和

打开新shell    ↓

The command completed successfully.

该窗口立即关闭。

我正在寻找的输出是相同的,但在一个窗口中,像这样:

C:\Users\Matthew>myprogram
*Output of dir command*
The command completed successfully
C:\Users\Matthew>

2 个答案:

答案 0 :(得分:1)

您将项目编译为控制台应用程序,以使其正常工作。您可以通过在编译时检查稍微加密命名的“Create CUI而不是GUI EXE”复选框来执行此操作。然后从shell调用myprogram.exe而不是.au3

#include <Constants.au3>

;myprogram.au3
$MyCommand = 'dir'
Local $foo = Run(@ComSpec & " /c " & $MyCommand & " \& echo Command completed successfully.", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

Local $output
While 1
    $output = StdoutRead($foo)
    If @error Then ExitLoop
    ConsoleWrite($output)
Wend

答案 1 :(得分:0)

由于这个问题没有答案:

$MyCommand = 'ping www.google.com && ping www.stackoverflow.com'
Run(@ComSpec & " /c " & $MyCommand, @SystemDir, @SW_Show)

像这样两个命令都在同一个CMD-Box中执行。