командная строка Windows

командная строка Windows

У меня есть exe-файл, который выводит данные с некоторыми параметрами, и я хочу, чтобы целая часть этих данных была сохранена в файле, как показано ниже:

C:\MyExe -paramдает o/p 123abc, поэтому 123должен быть сохранен в файле. Как мы можем добиться этого через командную строку Windows?

решение1

Это не так элегантно, как ответ dbenham, но это чистый Windows. Если вывод вашей программы всегда выглядит как ваш пример (последовательность цифр, за которой сразу следует строчная буква, а затем еще что-то), это сработает:

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

Примечания:

  • Если за последней цифрой может следовать символ, отличный от строчной буквы (даже пробел), включите в delims=строку все возможные символы-разделители.
  • Вышеуказанная команда будет работать, если ввести ее в интерактивной командной строке. Чтобы использовать ее в пакетном файле (т.е. скрипте командной строки), измените %xна %%x(оба вхождения).
  • Приведенная выше команда выполнит echo %x > out.txtподкоманду один раз для каждой строки вывода, C:\MyExe -paramсодержащей хотя бы один символ-разделитель. Если ваша программа пишет только эту одну строку, нет проблем. Если ваша программа пишет несколько таких строк, например,

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

    он будет перезаписывать файл каждый раз, и у вас останется только последнее значение. Если вы хотите захватить все числа, добавьте скобки, например:

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

    поэтому вся команда (вплоть до echo %x) будет рассматриваться как одна команда, а перенаправление ( >) произойдет только один раз. В качестве альтернативы просто измените на >, >>и выходные данные будут накапливаться (но также все, что было в файле до этого, все еще будет там, с новым выходом, добавленным к нему).

решение2

Это нетривиально с чистым пакетом, но это так, если вы используетеREPL.BAT — гибридная JScript/пакетная утилитакоторый выполняет поиск/замену регулярных выражений на stdin и записывает результат в stdout. Это чистый скрипт, который будет работать на любой современной машине Windows, начиная с XP.

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

Связанный контент