Actualmente estoy escribiendo una aplicación de línea de comandos en AutoIt y estoy teniendo problemas con lo que es imprimir de nuevo a la misma línea de comandos que se abrió en. Mi objetivo es tener el programa completo de trabajo dentro de un único intérprete de comandos. Aquí es lo que he intentado en un principio:

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

Entonces he compilado y corrió a través de la línea de comandos (cada cuadro de código representa una nueva shell):

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

Abre una nueva shell

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

Una vez terminado, listado de mis archivos en el directorio que sale y

Abre una nueva shell

The command completed successfully.

Y que la ventana se cierra de inmediato.

El resultado que estoy buscando es la misma cosa, pero en una ventana como esta:

C:\Users\Matthew>myprogram
*Output of dir command*
The command completed successfully
C:\Users\Matthew>
InformationsquelleAutor John Dorian | 2012-08-14

2 Comentarios

  1. 1

    De compilar el proyecto como una aplicación de consola para que esto funcione. Usted puede hacerlo mediante la comprobación de la un tanto críptica denominado «Crear CUI lugar de GUI EXE» casilla de verificación al momento de compilar. A continuación, llame a myprogram.exe de la shell en lugar de .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
    
    • Etiqueta, esto funciona maravillosamente en términos de visualización de salida, pero por desgracia todavía no se puede ejecutar el comando en la misma cáscara, sólo mostrar la salida. Esto es importante porque algunos comandos, suchh como «runas /noprofile /usuario:Administrador cmd.exe» que inicia un admin de símbolo de sistema, requieren de una se le pida la contraseña, que no pueden ser transmitidos a través de la propia orden. A este fin he migrado mi projectto C++
    • Mateo, para el comando runas hay una función especial llamada RunAs en AutoIt, en la que puede pasar el nombre de usuario y contraseña.
  2. 0

    Ya que esta es la pregunta sin respuesta:

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

    Como este, ambos comandos se ejecutan en el mismo CMD-Box.

Dejar respuesta

Please enter your comment!
Please enter your name here