我希望在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%
个文件。
答案 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 之前额外删除可能已存在的输出文件strong>如上面SourcesFor1.txt
示例所示,或者在块中嵌入 FOR 本身并使用>
将块输出的所有内容重定向到覆盖可能已存在的文件的文件中正如SourcesFor2.txt
示例所示。
在第二个 FOR 示例中,确保在echo %%I
和块的右括号)
之间没有空格,否则此空格将附加到写入的每个文件名上输出文件SourcesFor2.txt
。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
del /?
dir /?
echo /?
for /?
if /?
set /?
另请阅读Microsoft有关Using command redirection operators。
的文章