如何以递归方式列出指定目录中所需文件类型的所有文件?

时间:2016-04-01 12:23:53

标签: windows batch-file

我希望在Windows中使用.java脚本列出所需目录中的所有.bat个文件。当我运行时:

set JMETALHOME=%cd%
dir %JMETALHOME%\jmetal\problems /S /B 

它列出了problems目录中的所有文件。但是,当我想只将文件过滤到java文件时:

set JMETALHOME=%cd%
dir %JMETALHOME%\jmetal\problems /S /B *.java > sources.txt

它会列出.java文件夹中的所有%JMETALHOME%个文件。

1 个答案:

答案 0 :(得分:1)

有两种常用方法可以使用完整路径递归地在目录树中找到具有特定文件扩展名的所有文件的名称。一种常用方法是使用命令 DIR ,另一种常用方法是使用命令 FOR

演示* .java和* .html文件的两种方法的示例代码:

@echo off
set "JMETALHOME=%CD%"

dir "%JMETALHOME%\jmetal\problems\*.java" "%JMETALHOME%\jmetal\problems\*.html" /B /S >SourcesDir.txt

if exist SourcesFor1.txt del SourcesFor1.txt
for /R "%JMETALHOME%\jmetal\problems" %%I in (*.java *.html) do echo %%I>>SourcesFor1.txt

(for /R "%JMETALHOME%\jmetal\problems" %%I in (*.java *.html) do echo %%I)>SourcesFor2.txt

DIR 需要指定1个甚至更多的通配符模式以及路径(绝对或相对)。

FOR 提供了与通配符模式分开指定路径的可能性。

FOR 逐行输出找到的文件名,这需要使用>>重定向运算符,并在运行 FOR 如上面SourcesFor1.txt示例所示,或者在块中嵌入 FOR 本身并使用>将块输出的所有内容重定向到覆盖可能已存在的文件的文件中正如SourcesFor2.txt示例所示。

在第二个 FOR 示例中,确保在echo %%I和块的右括号)之间没有空格,否则此空格将附加到写入的每个文件名上输出文件SourcesFor2.txt

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • del /?
  • dir /?
  • echo /?
  • for /?
  • if /?
  • set /?

另请阅读Microsoft有关Using command redirection operators

的文章