windows - CMD: Iterate stdin piped fra en anden kommando

Indlæg af Hanne Mølgaard Plasc

Problem



Et nyt spørgsmål indeholder et problem, som jeg mange gange har tænkt på, men stadig ikke ved, om det har en elegant løsning:


Antag, jeg har en kommando, der danner en liste over filnavne eller mapper: dir /B /AD. Så vil jeg gerne røre resultatet af kommandoen til en iterator, der ville gøre noget med hvert filnavn.


Hvordan kan jeg gøre det?


I stedet for piping kan man helt sikkert bruge backtick-versionen af ​​for:


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


Men jeg er interesseret her i at få dataene fra stdin, så jeg ikke ville hardkode kilden til filnavnet.

Bedste reference


Jeg har tilfældet selv fundet en løsning:


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


Dette er endnu bedre end jeg troede, fordi det tillader filtrering direkte i backticks udtryk. For eksempel for at udelukke nogle bestemte filnavne (.svn og \_lib) kan jeg skrive:


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