簡體   English   中英

如何使用批處理從Windows命令行中的每個子目錄返回最新文件

[英]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 

它將返回:文件夾bx

我寫了一些腳本來嘗試這個,但它只返回最后一個目錄中的最新文件,在我的例子中是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.

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