У меня есть 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