我想在批處理腳本中使用 for 回圈列出目錄中的所有檔案和目錄。我該怎么做?
我在下面使用過,但沒有用:
for /r %%I in (".") do ( ls -ltr '%%I') ## Listing only filenames and not directories name
任何幫助都是可觀的。
謝謝!
uj5u.com熱心網友回復:
如果您只想遞回地獲得目錄和檔案的串列,那么:
dir /b/s "."
如果您想對每個流專案做一些特別的事情,使用for回圈,您可以執行以下操作:
for /f "tokens=* delims=" %%i in ('dir /b/s "."') do ( echo "%%i" )
在那里我用于echo回聲,但你可以放任何你需要的東西。
uj5u.com熱心網友回復:
創建兩個回圈,一個用于檔案
for /r %%i in (*.*) do <something>
一個用于目錄
for /r %%i in (.) do <something>
并在之后使用相同的命令 do
但是,既然您已經安裝了 Cygwin,為什么不使用該功能并執行
find . | xargs -L1 ls -ltr
其中find .找到的所有檔案和目錄,| xargs傳遞到輸出xargs,其-L1每行后拆分輸出和通過每個線對ls -ltr。
uj5u.com熱心網友回復:
“在批處理腳本中使用 for 回圈列出目錄中的所有檔案和目錄。” 你應該使用DIR命令。
如果您打開命令提示符視窗,請鍵入dir /?并按下ENTER您應該會看到其使用資訊的鍵。
需要注意的一件重要事情是/A選項。沒有特別提到的是,單獨使用它(不帶附加引數D, R, H, A, S, I,L或O)會啟用所有屬性。
因此,要以裸格式遞回列出當前目錄中的所有專案,您將使用:
DIR /A /B /S
或者
DIR . /A /B /S
如果您想在相對于當前目錄的特定位置列出它們,您可以使用:
DIR "Location" /A /B /S
或者:
DIR ".\Location" /A /B /S
并且對于特定的絕對路徑:
DIR "L:\ocation" /A /B /S
如果您希望它與批處理檔案位于同一位置,您可以使用當前腳本的特殊變數%0:
DIR "%~dp0." /A /B /S
要在For回圈中執行該命令,您應該首先打開命令提示符視窗,鍵入for /?并按下ENTER鍵,以讀取其使用資訊。
你應該注意到你正在運行一個命令,因此應該使用一個FOR /F回圈,即
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
但還應注意:
To use the FOR command in a batch program, specify %%variable instead of %variable.
所以:
FOR /F ["options"] %%variable IN ('command') DO command [command-parameters]
由于您已經擁有命令,因此選項現在變得很重要。您需要了解的第一個是eol雖然它似乎意味著行尾,但僅特定于一端,即開始!如果它以單個特定字符開頭,它不會將任何結果傳遞'command'給DO。默認的 foreol是分號;, (可能是因為歷史上它是許多檔案中的常見行注釋標記)。通常,檔案或目錄名可以包含并以分號開頭,因此為了包含所有檔案,您將指定一個不能包含在檔案名中的字符,對我來說最簡單的是?,盡管我已經看過很多例子使用|. 但是,當您執行遞回DIR命令,每個回傳的行都是一個完全限定的路徑,所有路徑都不能以分號開頭,因此您可以在此任務中忽略eol. 您顯然希望回傳所有內容,因此不需要skip回傳任何行。tokens和delimiters, 根據您要對結果執行的操作進行調整,在這種情況下,您希望“命令”回傳的每一行的全部內容不拆分特定字符。你應該注意到,tokens在默認情況下是1和delims默認既是空間和水平制表符。因此,您應該規定您不需要任何分隔符,以便第一個標記是“命令”每一行回傳的所有內容。你很少需要usebackq 選項,因此出于此答案和您的任務的目的,請忽略它。
現在把它們放在一起:
FOR /F "delims=" %%G IN ('DIR "Location" /A /B /S') DO command
最后,您可以對括號中的 DIR 命令的每個結果使用您想要的 DO 命令。該結果將保存在您的變數中%%G。
為了僅查看每個結果,我們將使用ECHO命令,(您只需將其替換為您選擇的命令)。請注意,由于DIR命令的每個結果都是一個檔案或目錄名稱字串,因此您通常應該將其雙引號。
所有物件.cmd
FOR /F "delims=" %%G IN ('DIR "Location" /A /B /S') DO ECHO "%%G"
請記住"Location"在運行 Windows 命令腳本之前根據需要進行替換
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/380724.html
