使用批处理命令查找最新文件的路径

时间:2015-10-22 21:09:37

标签: batch-file

我的文件夹中有多个子文件夹中的文件名为file.txt。我想获得最新的file.txt

的路径
FOR /r  %%i IN ('DIR file.txt /B /O:-D') DO SET a=%%i

echo Most recent subfolder: %a% 

给出了最新创建的文件夹,其中包含file.txt,而我想要的文件夹包含最新的file.txt

1 个答案:

答案 0 :(得分:2)

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=1,2,*" %%a in ('
        robocopy . . file.txt /l /nocopy /is /s /nc /ns /ts /ndl /njh /njs 
        ^| sort /r 2^> nul 
        ^| cmd /v /q /c "set /p .=&echo(^!.^!"
    ') do (
        echo File found           : %%c
        echo File timestamp (UTC^) : %%a %%b
        echo Folder of file       : %%~dpc
    )

这将使用robocopy命令枚举当前活动目录下的所有file.txt文件,而不复制任何内容,只生成具有yyyy/mm/dd hh:nn:ss utc时间戳的所有匹配文件的列表。然后列表按时间戳按降序排序,只有输出中的第一行被重新加入并回显以由for /f标记生成器处理,并以完整路径检索日期,时间和文件。

如果只需要文件夹且文件列表不是很大,则简化版本可以是

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=1,2,*" %%a in ('
        robocopy . . file.txt /l /nocopy /is /s /nc /ns /ts /ndl /njh /njs 
        ^| sort /r
    ') do set "lastFolder=%%~dpc" & goto :done
:done
    echo Last folder : %lastFolder%

几乎相同,但不是在列表生成中包含过滤器而只检索第一行(如果文件列表非常大则需要),这里for /f将检索完整列表但是在处理完第一个元素后,我们跳出循环到指定的标签。