[windows] 使用'for'循環遍歷目錄中的所有文件



Answers

遍歷...

  • ...當前目錄中的文件: for %f in (.\*) do @echo %f
  • ...當前目錄中的子目錄: for /D %s in (.\*) do @echo %s
  • ...當前和所有子目錄中的文件: for /R %f in (.\*) do @echo %f
  • ...當前和所有子目錄中的子目錄: for /R /D %s in (.\*) do @echo %s

不幸的是,我沒有找到任何方法來同時迭代文件和子目錄。

只需使用cygwin和bash來獲得更多的功能。

除此之外:您是否注意到,MS Windows的構建幫助是描述cmd命令行語法的好資源?

也看看這裡: http://technet.microsoft.com/en-us/library/bb490890.aspx : http://technet.microsoft.com/en-us/library/bb490890.aspx

Question

我如何使用for循環迭代目錄中的每個文件?

我怎麼能告訴如果某個條目是一個目錄或者它只是一個文件?




嘗試這個:

::Example directory
set SetupDir=C:\Users

::Loop in the folder with "/r" to search in recursive folders, %%f being a loop ::variable 
for /r "%SetupDir%" %%f in (*.msi *.exe) do set /a counter+=1

echo there are %counter% files in your folder

它計算您的目錄(和子目錄)中的.msi和.exe文件。 所以它也會將文件夾和文件作為可執行文件進行區別。

如果您需要過濾循環中的其他文件,只需添加一個擴展名(.pptx .docx ..)




在bash中,你可能會這樣做:

for fn in *; do
    if [ -d $fn ]; then
        echo "$fn is a directory"
    fi
    if [ -f $fn ]; then
        echo "$fn is a file"
    fi
done

我只注意到你問了一些關於批處理的問題 ,我誤解為bash 。 這個答案可能因此不適合你的問題。




這個for-loop將列出目錄中的所有文件。

pushd somedir
for /f "delims=" %%f in ('dir /b /a-d-h-s') do echo %%f
popd

“delims =”對於顯示帶有空格的長文件名很有用....

'/ b“只顯示名字,而不是大小日期等。

有些事情要了解dir的論點。

  • 任何使用“/ a”都會列出所有內容,包括隱藏和系統屬性。
  • “/ ad”只會顯示子目錄,包括隱藏目錄和系統目錄。
  • “/ ad”參數消除了'D'irectory屬性的內容。
  • “/ adhs”將顯示所有內容,但具有'D'irectory','H'idden''系統屬性的條目。

如果你在命令行中使用它,請刪除“%”。

希望這可以幫助。




for %1 in (*.*) do echo %1

在cmd中嘗試“幫助”以獲取完整指南

這是XP命令的指南。 http://www.ss64.com/nt/




試試這個來測試一個文件是否是一個目錄:

FOR /F "delims=" %I IN ('DIR /B /AD "filename" 2^>^&1 ^>NUL') DO IF "%I" == "File Not Found" ECHO Not a directory

這只會告訴你一個文件是不是一個目錄,如果該文件不存在,這也是真的,所以如果你需要的話一定要先檢查一下。 脫字符(^)用於轉義重定向符號,文件列表輸出被重定向到NUL以防止顯示,而DIR列表的錯誤輸出被重定向到輸出,因此您可以根據DIR的消息“File Not Found “。




我會使用vbscript(Windows Scripting Host),因為在批處理中,我確信你不能說名稱是文件或目錄。

在vbs中,它可以是這樣的:

Dim fileSystemObject
Set fileSystemObject = CreateObject("Scripting.FileSystemObject")

Dim mainFolder
Set mainFolder = fileSystemObject.GetFolder(myFolder)

Dim files
Set files = mainFolder.Files

For Each file in files
...
Next

Dim subFolders
Set subFolders = mainFolder.SubFolders

For Each folder in subFolders
...
Next

在MSDN上檢查FileSystemObject




Related