回答
此列出當前目錄下的所有文件(而且只有這些文件)加倍%符號。
for /r %%i in (*) do echo %%i
(感謝@agnul)
它可能取決於您使用的操作系統,即XP/Vista/2000可能支持不同的命令行參數。 – RickL 2008-09-26 10:21:07
如果你不希望遞歸使用它,請確保你取出/ r – jocull 2010-11-29 19:10:45
如果你想在當前目錄(遞歸)中只回顯擴展名的文件名(不是完整路徑),你可以這樣做像這樣:`for/r%i in(*)do(echo%〜nxi)`。這個線程也可以非常有用:http://stackoverflow.com/questions/112055/what-does-d0-mean-in-a-windows-batch-file。 – Sk8erPeter 2011-12-21 21:25:06
在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
我只注意到你問一批,這是我誤讀爲慶典。這個答案可能因此不適合你的問題。
%1引用傳入的第一個參數,不能在迭代器中使用。
試試這個:如果你運行你需要一個批處理文件,命令
for /r %i in (*) do echo %i
另外:
@echo off
for %%i in (*.*) do echo %%i
你說得對。我試過在即時模式下檢查FOR語法並直接粘貼到忘記參數的答案:-) – Axeman 2008-09-26 09:55:58
我會使用VBScript(Windows腳本宿主),因爲在批量我敢肯定,你不能告訴一個名字是一個文件或目錄。
在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
迭代通過......
- ...在當前目錄下的文件:
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的buildin幫助是描述cmd命令行語法的好資源?
也可以看看這裏:http://technet.microsoft.com/en-us/library/bb490890.aspx
有命令行,並從一個批處理文件運行FOR
之間的細微差別。在批處理文件中,您需要在每個變量引用之前放置兩個%
字符。
從命令行:
FOR %i IN (*) DO ECHO %i
從一個批處理文件:
FOR %%i IN (*) DO ECHO %%i
這for循環會列出目錄中的所有文件。
pushd somedir
for /f "delims=" %%f in ('dir /b /a-d-h-s') do echo %%f
popd
「delims =」是有用的,以顯示長文件名,在它的空間....
「/ B」只顯示名稱,而不是大小日期等。
有些事情要了解目錄的/一個說法。
- 任何使用「/ A」將列出一切,包括隱藏和系統屬性的。
- 「/廣告」只會顯示子目錄,包括隱藏的和系統的。
- 「/ a-d」參數用'D irectory屬性消除內容。
- 「/ a-d-h-s」將顯示所有內容,但具有'D'irectory','H'idden''系統屬性的條目。
如果您在命令行中使用此命令,請刪除「%」。
希望這會有所幫助。
下面的代碼創建一個名爲「AllFilesInCurrentDirectorylist.txt」在當前目錄,其中包含在當前目錄中的所有文件(僅文件)的列表中的文件。檢查出來
dir /b /a-d > AllFilesInCurrentDirectorylist.txt
試試這個測試,如果文件是目錄:
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 」。
我使用帶/ L選項的xcopy命令來獲取文件名。所以,如果你想獲得一個目錄或所有文件的子目錄,你可以做這樣的事情:
for /f "delims=" %%a IN ('xcopy "D:\*.pdf" c:\ /l') do echo %%a
我只是使用C:\作爲目標,因爲它總是存在於Windows系統,它是不復制,所以沒關係。如果你希望子目錄也只是在最後使用/ s選項。如果您因其他原因需要它們,您也可以使用xcopy的其他開關。
它也可以使用forfiles命令:
forfiles /s
,並檢查它是否是一個目錄
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
遍歷每個文件for循環將工作:
for %%f in (directory\path\*) do (something_here)
在我來說,我也想了文件內容,名稱等
這導致了一些問題,我想我的使用情況下,可能會有幫助。這裏是一個循環,讀取目錄中每個'.txt'文件的信息,並允許你對它做某些事情(例如setx)。
@ECHO OFF
setlocal enabledelayedexpansion
for %%f in (directory\path\*.txt) do (
set /p val=<%%f
echo "fullname: %%f"
echo "name: %%~nf"
echo "contents: !val!"
)
*限制:VAL < = %%˚F只會獲取該文件的第一行。
試試這個:
::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 ..)如果你需要在循環
- 1. 循環遍歷R中某個目錄中的所有文件
- 2. 「for」在shell中循環遍歷目錄
- 3. Python for循環沒有循環遍歷所有項目
- 4. 在R中循環遍歷for循環的子目錄
- 5. 使用delphi中的shell循環遍歷目錄中的文件
- 6. for循環不遍歷所有增量
- 7. For循環未遍歷所有數據
- 8. 沒有循環遍歷所有文件
- 9. Python:My for循環不會遍歷列表中的所有項目
- 10. 循環遍歷目錄中的文件並使用HEAD命令
- 11. 循環遍歷所有的記錄和
- 12. 使用循環遍歷目錄
- 13. 循環遍歷ColdFusion中多個目錄中的所有圖像
- 14. 如何循環遍歷目錄中的所有文本文件C#
- 15. 循環遍歷R中的同一目錄中的所有文件
- 16. FOR循環遍歷兩個文件夾
- 17. 循環遍歷R中的文件夾中的所有文件
- 18. 循環遍歷子目錄批處理文件中的文件
- 19. 循環遍歷目錄中的所有數據庫
- 20. 使用jQuery循環遍歷所有LI's
- 21. 循環遍歷所有值
- 22. 如何讓這個腳本循環遍歷目錄中的所有文件?
- 23. 使用Corona和Lua遍歷目錄中的所有文件
- 24. Shellscript循環遍歷文件夾中的所有文件
- 25. 如何遍歷目錄和子目錄中的所有文件
- 26. 使用for循環遍歷excel範圍
- 27. 使用for循環遍歷xml
- 28. 使用for循環遍歷字典
- 29. 使用'for'循環遍歷C++向量
- 30. 使用for循環遞增遍歷表
假設你的意思是默認的Windows外殼來過濾其他文件,我已經重新標記您的文章更加清晰了一點點 – 2008-09-26 09:54:16
還請指定您正在使用的Windows版本。 – jop 2008-09-26 11:15:36
這應該分爲兩個單獨的問題,因爲它們彼此獨立。 – julealgon 2016-11-27 23:55:01