2

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

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

3 ответа3

1

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

c:\myExe -param | repl "(\d*).*" $1 >out.txt
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) будет обрабатываться как одна команда, а перенаправление (>) произойдет только один раз.  В качестве альтернативы просто измените > на >> , и выходные данные будут накапливаться (но также все, что было в файле до того, все еще будет там, с новым добавленным к нему выходным сигналом).

-1

Вы можете просто использовать символ > чтобы сохранить вывод командной строки в файл.

Например, если вы ipconfig /all > ipinfo.txt он сохранит вывод в текстовом файле с именем ipinfo.txt. Вы также можете использовать >> чтобы добавить в тот же текстовый файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .