Как запустить команду без открытия новой оболочки с помощью командной строки AutoIt

90
11

В настоящее время я пишу приложение командной строки в AutoIt, и у меня возникают проблемы с его возвратом в ту же самую командную строку, в которой я ее открыл. Моя цель состоит в том, чтобы вся программа работала в одной оболочке. Вот что я пробовал изначально:

;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)

Затем я скомпилировал его и выполнил его через командную строку (каждое поле кода представляет собой новую оболочку):

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.

И это окно немедленно закрывается.

Результат, который я ищу, - это одно и то же, но в одном окне:

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

спросил(а) 2012-08-14T07:03:00+04:00 7 лет, 7 месяцев назад
1
Решение
52

Для этого вы компилируете свой проект в качестве консольного приложения. Вы можете это сделать, установив флажок при создании скрипта с именем CUI вместо GUI EXE. Затем вызовите 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

ответил(а) 2012-08-16T01:28:00+04:00 7 лет, 7 месяцев назад
37

Поскольку этот вопрос остается без ответа:

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

Подобным образом обе команды выполняются в том же CMD-Box.

ответил(а) 2015-08-05T11:03:00+03:00 4 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема