В Linux это принимает одну команду и передает ее вывод (stdout) другой:
echo `ls`
Что такое Windows/ CMD / пакетный эквивалент?
В Linux это принимает одну команду и передает ее вывод (stdout) другой:
echo `ls`
Что такое Windows/ CMD / пакетный эквивалент?
cmd.exe
предлагает элементарную возможность подстановки команд с помощью обратных галочек, но только через цикл for
с параметром /f usebackq
. Это довольно умопомрачительно по сравнению с тем, что сделала бы оболочка Unix, так как ее стандартное поведение состоит в том, чтобы выбирать только первое слово каждой строки вывода дочернего элемента и только так, чтобы вы могли перебирать их, а не вставлять все они сразу в командной строке. (Вы можете немного изменить поведение с помощью опции delims
.) Вот пример:
for /f usebackq %F in (`dir /w s*c`) do echo %F
Если вам нужна настоящая подстановка команд в стиле Unix, вам понадобится подлинная оболочка Unix, например, Cygwin bash или моя собственная (коммерческая) оболочка Hamilton C.
Пример вывода эха dir
(используйте одинарные кавычки, а не обратный тик!):
echo off & for /f "delims=" %A in ('dir') do echo %A
В интерактивном режиме вам нужно набрать echo on
и нажать Enter для выхода. Если вы уверены, что цикл запускается только один раз (т. Е. Вывод ('xxx')
- это одна строка), вы можете напрямую добавить echo on
в команду.
echo off & for /f "delims=" %A in ('set /a 0x3DE1') do net helpmsg %A & echo on
По неизвестной причине ('set /a 0x3DE1')
не может работать как 'set /a c=0x3DE1'
, даже если set /a c=0x3DE1
работает как одна команда.
Пример echo hello world
из 'echo hello world'
(одинарные кавычки):
echo off & for /f "delims=" %A in ('echo hello world') do echo %A
Пример echo hello world
из ""
(буквальная строка):
echo off & for /f "delims=" %A in ("hello world") do echo %A
Выше синтаксиса %A
для интерактивного режима, вам нужно двойной %
в пакетном файле, например %%A
Позаботьтесь , если вы делаете echo %A
внутри цикла, представьте себе , если один из строки из вывода команды призвал, то есть 2 проблемы:
[1] echo $A
означает echo on
котором эхо ничего не будет и невидимо. Я могу думать только о сравнении on
для обработки такого конкретного случая.
[2] echo $A
означает echo on
котором будет переключаться обратно вывод командной строки; Вам может понадобиться добавить дополнительное echo off
в цикле, например:
echo off & for /f "delims=" %A in ('dir /b') do echo %A & echo off
Обратите внимание, что приведенные выше примеры далеко не эквивалентны ``
поскольку они запускают аргумент построчно. Вы можете создать этот пакет, чтобы попытаться смоделировать echo `ls`
(он зацикливается и добавляет все строки в одну переменную, разделенные пробелом, а затем передает их в качестве аргумента позже):
@echo off
Setlocal EnableDelayedExpansion
set fls=
for /f "delims=" %%A in ('dir /b') do set fls=!fls! %%A
echo %fls%
- изменить: добавлены пропущенные пробелы