CMD: итерация стандартного ввода из другой команды - PullRequest
1 голос
/ 17 марта 2012

Недавний вопрос содержит проблему, о которой я много раз думал, но все еще не знаю, есть ли у нее элегантное решение:

Предположим, у меня есть команда, которая формирует список имен файлов или каталогов: dir /B /AD. Затем я хотел бы передать результат команды итератору, который будет что-то делать с каждым именем файла.

Как я могу это сделать?

Вместо конвейера, безусловно, можно использовать обратную версию for:

for /F "usebackq" %F in (`dir /B /AD`) do @echo %F

Но меня интересует получение данных из stdin, чтобы я не мог жестко закодировать источник имен файлов.

1 Ответ

2 голосов
/ 17 марта 2012

Я сам нашел решение:

dir /B /AD | for /F "usebackq" %F in (`findstr "."`) do @echo %F

Это даже лучше, чем я думал, потому что это позволяет фильтровать прямо в выражении backticks.Например, чтобы исключить некоторые конкретные имена файлов (.svn и _lib), я могу написать:

dir /AD /B | for /F "usebackq" %F in (`findstr /V "\.svn _lib"`) do @echo %F
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...