ОП хотел что-то очень специфическое (создание текстового файла с выходными данными), и принятый ответ прекрасно справляется с этой задачей, но представленное решение не работает хорошо вне этого конкретного контекста. Например, если я хочу передать многострочный ввод в команду, я не могу использовать синтаксис ( echo )
. Вот что мне помогло.
С учетом сценария perl с именем "echolines.pl", состоящего из следующего (для имитации "реальной" программы):
use strict;
use warnings;
while (<>) {
chomp;
print qq(<$_>\n);
}
и командный файл с именем "testme.bat", содержащий:
@echo off
set FOO=foo
set BAR=bar
set BAZ=baz
echo %FOO%^
&echo %BAR%^
&echo %BAZ%|perl echolines.pl
при запуске выдает ожидаемый результат:
C:\>testme
<foo>
<bar>
<baz>
Необходимо соблюдать осторожность с пробелами, чтобы убедиться, что все работает правильно, без каких-либо пустых мест. В частности: каждый конец строки должен быть символом (^), за которым следует новая строка, последующие строки должны начинаться сразу с амперсанда (&), а в последней строке должен быть канал, начинающийся сразу после последнего отправляемого элемента. Невыполнение этого требования приведет к отсутствию параметров или лишним пробелам до и после параметров.