Windows CMD:迭代从另一个命令传输的stdin
最近的一篇文章包含了一个我曾多次思考过的问题,但仍然不知道它是否有一个优雅的解决方案: 假设我有一个命令,它形成了一个文件名或目录列表:Windows CMD:迭代从另一个命令传输的stdin,windows,cmd,Windows,Cmd,最近的一篇文章包含了一个我曾多次思考过的问题,但仍然不知道它是否有一个优雅的解决方案: 假设我有一个命令,它形成了一个文件名或目录列表:dir/B/AD。然后,我想通过管道将命令的结果传递给迭代器,迭代器将处理每个文件名 我怎么做 您当然可以为使用反勾号版本的,而不是管道: for /F "usebackq" %F in (`dir /B /AD`) do @echo %F 但我对从stdin获取数据感兴趣,这样我就不会硬编码文件名的源代码。我碰巧自己找到了一个解决方案: dir /B /AD
dir/B/AD
。然后,我想通过管道将命令的结果传递给迭代器,迭代器将处理每个文件名
我怎么做
您当然可以为使用反勾号版本的,而不是管道:
for /F "usebackq" %F in (`dir /B /AD`) do @echo %F
但我对从stdin获取数据感兴趣,这样我就不会硬编码文件名的源代码。我碰巧自己找到了一个解决方案:
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