Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows CMD:迭代从另一个命令传输的stdin_Windows_Cmd - Fatal编程技术网

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