Linha de comando do Windows

Linha de comando do Windows

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

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

Responder1

Isso não é tão elegante quanto a resposta de dbenham, mas é puro Windows. Se a saída do seu programa sempre se parecer com o seu exemplo (uma sequência de dígitos imediatamente seguida por uma letra minúscula e seguida por outras coisas), isso 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 delims=string.
  • O comando acima funcionará se digitado em um prompt de comando interativo. Para usá-lo em um arquivo em lote (ou seja, um script de prompt de comando), altere %xpara %%x(ambas as ocorrências).
  • O comando acima executará o echo %x > out.txtsubcomando uma vez para cada linha de saída C:\MyExe -paramque contenha pelo menos um caractere delimitador. Se o seu programa escreve apenas aquela linha, não há problema. Se você programar escreve múltiplas dessas linhas, por exemplo,

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

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

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

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

Responder2

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

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

informação relacionada