В 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%
- изменить: добавлены пропущенные пробелы