簡體   English   中英

如何遞歸列出指定目錄中所需文件類型的所有文件?

[英]How to recursively list all files of desired file type in a specified directory?

我想在 Windows 中使用.bat腳本列出所需目錄中的所有.java文件。 當我運行這個:

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

它列出了problems目錄中的所有文件。 但是當我只想將文件過濾到 java 文件時:

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

它列出了%JMETALHOME%文件夾中的所有.java文件。

有兩種常用的方法可以通過完整路徑遞歸地獲取在目錄樹中找到的具有特定文件擴展名的所有文件的名稱。 一種常用方法是使用命令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 %%ISourcesFor2.txt括號)之間沒有空格,否則該空格將附加在寫入輸出文件SourcesFor2.txt每個文件名上。

要了解使用的命令及其工作原理,請打開命令提示符窗口,在那里執行以下命令,並仔細閱讀為每個命令顯示的所有幫助頁面。

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

另請閱讀有關使用命令重定向運算符的 Microsoft 文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM