最近的question包含了我多次考虑的问题,但仍然不知道它是否有一个优雅的解决方案:
假设我有一个命令,它构成了一个文件名或目录列表:dir /B /AD
。然后,我想将命令的结果传递给迭代器,迭代器将对每个文件名执行某些操作。
我该怎么做?
当然可以使用for
的反引号版本来代替滚边:
for /F "usebackq" %F in (`dir /B /AD`) do @echo %F
但我感兴趣的是从stdin获取数据,所以我不会硬编码文件名的来源。
答案 0 :(得分:2)
我碰巧找到了解决方案:
dir /B /AD | for /F "usebackq" %F in (`findstr "."`) do @echo %F
这比我想象的要好,因为它允许直接在反引号表达式中过滤。例如,为了排除一些特定的文件名(.svn和_lib),我可以写:
dir /AD /B | for /F "usebackq" %F in (`findstr /V "\.svn _lib"`) do @echo %F