Создайте список новейших файлов в каждом подкаталоге в пакете Windows

Мне нужно определить, какой самый новый файл находится в каждом подкаталоге в корневой папке, и вывести этот список в текстовый файл с указанием имени файла и даты создания. Например, если корневым каталогом является D: \ Data, который содержит всего 4 подкаталога, а один из этих 4 содержит подкаталог, мой выходной файл должен содержать список только файлов (не включая созданные папки) примерно так:

D: \ Data \ folder1 \ filename 02/12/14

D: \ Data \ folder2 \ filename 03/02/14

D: \ Data \ folder3 \ filename 03/15/14

D: \ Data \ folder4 \ folder01 \ filename 01/22/14

Я проверил другие сообщения, но ни один, кажется, не делает это специально...

1 ответ

Два варианта

@echo off
    setlocal enableextensions enabledelayedexpansion

    set "rootFolder=c:\somewhere"

:: option 1
    echo --------------------------------------------------------------------------------
    for /d /r "%rootFolder%" %%a in (.) do (
        set "first="
        for /f "delims=" %%b in ('dir /o-d /a-d /b "%%~fa\*" 2^>nul') do if not defined first (
            set "first=1"
            for %%c in ("%%~fa\%%b") do echo %%~tc %%~fc
        )
    )

:: option 2
    echo --------------------------------------------------------------------------------
    set "tempFile=%temp%\%~nx0.%random%.tmp"
    dir /a-d /b /s /o-d "%rootFolder%" 2>nul >"%tempFile%"

    set "oldFolder="
    for /f "usebackq delims=" %%a in ("%tempFile%") do if not "%%~dpa"=="!oldFolder!" (
        echo %%~ta %%~fa
        set "oldFolder=%%~dpa"
    )

    del /q "%tempFile%" >nul 2>nul

Вариант 1 будет проходить по структуре папок и для каждого dir выполняется команда для получения списка файлов в папке в порядке убывания даты. Первый в списке самый последний.

Вариант 2 будет использовать только один dir Команда для получения полного списка файлов в порядке убывания даты и сохранения полученной информации во временном файле. Затем файл обрабатывается. Каждый раз, когда меняется имя папки, выведите первую строку, которая будет самым последним файлом в папке.

Вариант 1 будет запущен раньше для отображения информации, но поскольку используется несколько команд, потребуется больше времени для выполнения, но требуется меньше памяти, поскольку он будет каждый раз получать список файлов только из одной папки.

Вариант 2 использует меньше команд и будет быстрее, но использует временный файл и требует больше памяти, чем Вариант 1, поскольку полный список файлов будет загружен в память.

Выберите в зависимости от того, насколько глубокой является структура вашей папки, сколько у вас файлов, сколько памяти... просто тестируйте.

Другие вопросы по тегам