Перенаправление вывода на аргумент командной строки другой команды в Windows - PullRequest
6 голосов
/ 15 сентября 2009

Как я могу в Windows использовать вывод скрипта / команды в качестве аргумента для другого скрипта? (Канал | здесь не будет работать, так как этот другой скрипт не читает со стандартного ввода)

Слишком ясно: у меня есть AnotherScript, которому нужен аргумент arg, например ::100100

AnotherScript 12

теперь я хочу, чтобы аргумент (в примере 12) исходил из выходных данных скрипта, назовите его ScriptB. Поэтому я хотел бы что-то вроде

AnotherScript (ScriptB)

AnotherScript - это на самом деле скрипт на python, требующий аргумента, а ScriptB - это скрипт cygwin bash, который выдает некоторое число, поэтому я хотел бы использовать его примерно так:

c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)

Спасибо за ответы. Однако, учитывая трудоемкую конструкцию 'for', я переписал AnotherScript для чтения из стандартного ввода. Это кажется лучшим решением.

Ответы [ 4 ]

8 голосов
/ 15 сентября 2009

Примечание. Все это требует, чтобы команды находились в командном файле. Отсюда двойные % знаки.

Вы можете использовать команду for для захвата выходных данных команды:

for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x

, затем вы можете использовать этот вывод в другой команде:

AnotherScript %args%

Это приведет к тому, что %args% будет содержать последнюю строку из вывода ScriptB. Если он возвращает только одну строку, вы можете свернуть это в одну строку:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x

При использовании вне командного файла вы должны использовать %x вместо %%x.

Однако, если ScriptB возвращает более одной строки, AnotherScript запускается для каждой из этих строк. Вы можете обойти это - хотя только в пакетном файле - прервав после первой итерации цикла:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof
3 голосов
/ 15 сентября 2009

Вы можете сохранить выходные данные вашего первого скрипта в переменной среды и использовать его содержимое в качестве параметра командной строки для второго скрипта, если это то, что вам нужно.

Примерно так:

for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%
1 голос
/ 15 сентября 2009

Сохранить данные во временный файл?

или используйте именованный канал вместо канала на стандартном входе и выходе.

или вызовите другой скрипт из первого и передайте данные через аргументы команды

0 голосов
/ 15 сентября 2009

Разве вы не делаете вещи более сложными, чем необходимо?

Вызовите AnotherScript из bash. При необходимости установите Cygwin, чтобы вы могли это сделать.

...