línea de comando de Windows

línea de comando de Windows

Tengo un archivo ejecutable que produce una salida con algún parámetro, y de esa salida quiero que la parte entera se almacene en un archivo como el siguiente:

C:\MyExe -paramda un o/p 123abc, por lo que 123debe almacenarse en un archivo. ¿Cómo podemos lograr esto a través de la línea de comandos de Windows?

Respuesta1

Esto no es tan elegante como la respuesta de dbenham, pero es puro Windows. Si la salida de su programa siempre se parece a su ejemplo (una secuencia de dígitos seguida inmediatamente por una letra minúscula y luego seguida por otras cosas), esto funcionará:

for /f "delims=abcdefghijklmnopqrstuvwxyz" %x in ('C:\MyExe -param') do echo %x > out.txt

Notas:

  • Si el último dígito puede ir seguido de un carácter que no sea una letra minúscula (incluso un espacio), incluya todos los caracteres delimitadores posibles en la delims=cadena.
  • El comando anterior funcionará si se escribe en un símbolo del sistema interactivo. Para usarlo en un archivo por lotes (es decir, una secuencia de comandos del símbolo del sistema), cambie %xa %%x(ambas apariciones).
  • El comando anterior ejecutará el echo %x > out.txtsubcomando una vez por cada línea de salida C:\MyExe -paramque contenga al menos un carácter delimitador. Si su programa escribe solo esa línea, no hay problema. Si su programa escribe varias líneas de este tipo, por ejemplo,

    5gold rings
    4calling birds
    3french hens
    2turtle doves
    1partridge
    

    sobrescribirá el archivo cada vez y terminará con solo el último valor. Si desea capturar todos los números, agregue paréntesis, como este:

    (for /f "delims=abc…xyz" %x in ('C:\MyExe -param') do echo %x) > MyOutputFile.txt
    ↑                                                            ↑
    

    por lo tanto, el comando completo (hasta echo %x) se tratará como un solo comando y la redirección ( >) ocurrirá solo una vez. Alternativamente, simplemente cambie >a >>y las salidas se acumularán (pero también, todo lo que estaba en el archivo anterior seguirá allí, con la nueva salida adjunta).

Respuesta2

Esto no es trivial con un lote puro, pero lo es si usasREPL.BAT: una utilidad híbrida JScript/por lotesque realiza una búsqueda/reemplazo de expresión regular en stdin y escribe el resultado en stdout. Es un script puro que se ejecutará en cualquier máquina Windows moderna desde XP en adelante.

c:\myExe -param | repl "(\d*).*" $1 >out.txt

información relacionada