linha de comando do Windows

2

Eu tenho um exe que produz uma saída com algum parâmetro, e dessa saída eu quero que a parte inteira seja armazenada em um arquivo como abaixo:

C:\MyExe -param fornece o / p 123abc , portanto, 123 deve ser armazenado em um arquivo. Como podemos conseguir isso através da linha de comando do Windows?

    
por satishcse 02.09.2014 / 19:15

3 respostas

1

Isso não é tão elegante quanto a resposta de dbenham, mas é puro Windows. Se a saída do seu programa sempre se parece com o seu exemplo (uma seqüência de dígitos imediatamente seguida por uma letra minúscula e depois seguida por outras coisas), isso vai funcionar:

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

Notas:

  • Se o último dígito puder ser seguido por um caractere diferente de uma letra minúscula (até mesmo um espaço), inclua todos os caracteres delimitadores possíveis na string delims= .
  • O comando acima funcionará se for digitado em um prompt de comando interativo. Para usá-lo em um arquivo em lotes (por exemplo, um script do Prompt de Comando), altere %x para %%x (ambas as ocorrências).
  • O comando acima executará o subcomando echo %x > out.txt uma vez para cada linha de saída de C:\MyExe -param que contém pelo menos um caractere delimitador. Se o seu programa escreve apenas essa linha, não há problema. Se você programa grava várias dessas linhas, por exemplo,

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

    ele substituirá o arquivo todas as vezes e você terá apenas o último valor. Se você quiser capturar todos os números, adicione parênteses, como este:

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

    para que todo o comando (até echo %x ) seja tratado como um único comando e o redirecionamento ( > ) ocorrerá apenas uma vez. Como alternativa, basta alterar o > para >> e as saídas serão acumuladas (mas também, qualquer coisa que estava no arquivo antes ainda estará lá, com a nova saída anexada a ele).

por 03.09.2014 / 18:03
1

Isso não é trivial com o lote puro, mas é se você usar o REPL.BAT - um utilitário JScript / batch híbrido que executa uma expressão regular search / replace em stdin e grava o resultado em stdout. É um script puro que será executado em qualquer máquina moderna do Windows a partir do XP.

c:\myExe -param | repl "(\d*).*" $1 >out.txt
    
por 03.09.2014 / 05:58
-1

Você pode simplesmente usar o símbolo > para salvar a saída da linha de comando em um arquivo.

Por exemplo, se você digitar ipconfig /all > ipinfo.txt , ele salvará a saída no arquivo de texto denominado ipinfo.txt. Você também pode usar >> para anexar ao mesmo arquivo de texto.

    
por 02.09.2014 / 21:20