2012-08-14 63 views
0

我目前正在使用AutoIt編寫命令行應用程序,並且無法使其打印回到打開它的同一命令行。我的目標是讓整個程序在一個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> 

打開新的外殼 ↓

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

一旦完成,我的目錄中列出的文件退出,並且

打開新的外殼 ↓

The command completed successfully. 

而且該窗口馬上關閉。

我要找的輸出是同樣的事情,但在一個窗口中,像這樣:

回答

1

您編譯項目作爲該控制檯應用程序來運行。您可以通過在編譯時檢查有點隱名的「創建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 
+0

標籤,這在顯示輸出方面奇妙地工作,但不幸的是仍然不能在同一個shell中運行命令,只是顯示輸出。這很重要,因爲一些命令,例如啓動管理提示的「runas/noprofile/user:Administrator cmd.exe」,需要一個提示密碼,該密碼不能通過命令本身傳遞。爲此,我已將我的項目遷移到C++ – 2012-08-20 22:22:25

+2

Matthew,對於runas命令,在AutoIt中有一個名爲RunAs的特殊函數,您可以在其中傳遞用戶名和密碼。 – 2014-07-17 09:03:38

0

因爲這個問題沒有答案:

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

這樣既命令在同一個CMD-Box的執行。

相關問題