[英]How to return the newest file from each sub-directory in Windows command line using batch
我在Windows 7上使用Windows命令行的批處理腳本。我目前正在嘗試從每個子目錄獲取最新文件並將它們打印到屏幕上。 例如,如果我有:
C:\\Home\\Hi\\Folder1\\a 01/05/2016 C:\\Home\\Hi\\Folder1\\b 01/10/2016 C:\\Home\\Hi\\Folder2\\x 03/05/2016 C:\\Homeh\\Hi\\Folder2\\y 03/1/2016
它將返回:文件夾b
和x
。
我寫了一些腳本來嘗試這個,但它只返回最后一個目錄中的最新文件,在我的例子中是x
。 該腳本是:
FOR /R "C:\Users\Maxx\Desktop\tools" %%G in (.) DO (
Pushd %%G
FOR /F %%I IN ('DIR %%G /B /O:D') DO SET NEWEST=%%I
ECHO %NEWEST%
Popd )
Echo "back home"
如果有人知道如何從每個子目錄中獲取最新文件,那將是很棒的。
注意:我已經查看了各種其他示例,例如: 在Windows批處理中的每個子目錄中生成最新文件的列表 ,這對於構建我現在擁有的內容非常有用,但最終它不起作用。
您需要在編寫和在同一代碼塊中讀取變量NEWEST
應用延遲擴展 :
setlocal EnableDelayedExpansion
for /R "C:\Users\Maxx\Desktop\tools" %%G in (.) do (
pushd "%%~G"
for /F %%I in ('dir "%%~G" /B /O:D') do set "NEWEST=%%I"
echo !NEWEST!
)
popd
echo back home
endlocal
或者,通過call echo %%NEWEST%%
替換echo %NEWEST%
:
for /R "C:\Users\Maxx\Desktop\tools" %%G in (.) do (
pushd "%%~G"
for /F %%I in ('dir "%%~G" /B /O:D') do set "NEWEST=%%I"
call echo %%NEWEST%%
)
popd
echo back home
另外,我改進了引用。
@ECHO OFF
SETLOCAL
FOR /R "C:\106x" %%G in (.) DO (
Pushd "%%G"
SET "first="
FOR /F "delims=" %%I IN ('DIR . /a-d /B /O:-D 2^>nul') DO IF NOT DEFINED first SET first=Y&ECHO %%~dpI
Popd
)
Echo "back home"
GOTO :EOF
對於每個目錄,轉到目錄, first
清除標志,掃描目錄中的文件(而不是目錄),基本格式,反向日期順序,禁止從空目錄中找到任何“找不到文件”報告。
在找到第一個(即最年輕的)文件時, first
設置標志並報告文件名 - 或您需要的文件名部分。
一旦設置了first
,就不會調用報告機制,就if defined
了變量的當前值一樣。
請注意,在指定日期時,建議您說明您正在使用的格式 - 或者至少使用日期編號> 12的日期,這應該足夠了。 例如,您的日期“01/10/2016”可能會被解釋為1月10日或10月1日,具體取決於受訪者的地區。 “2016年10月13日”或“2016年10月13日”會使問題變得明顯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.