Простое решение могло быть
@echo off
setlocal enableextensions disabledelayedexpansion
set "root=K:\path\tp\source\dir"
set "mask=*.ext"
for %%r in ("%root%\.") do for /f "tokens=2,*" %%a in ('
robocopy "%%~fr" "%%~fr" "%mask%" /njh /njs /nc /ns /ts /s /ndl /nocopy /is /r:0 /w:0 /l
^| sort /r
^| cmd /v /e /c"(set /p .=&echo(!.!)"
') do set "lastFile=%%b"
echo Last file : "%lastFile%"
Этот код использует robocopy
для создания списка файлов с префиксом отметки времени (переключатели просто не запрашивают заголовок задания, сводку задания, класс файла, размер файла, отметку времени, рекурсивный, нет списка каталогов, нет копии информации каталога, включают то же файлы, без повтора, без ожидания, не копировать, только сгенерировать список).
Этот список с префиксом временных меток (UTF yyyy/mm/dd hh:mm:ss
последняя запись файла) затем сортируется в обратном порядке, чтобы получить последний файл в первой строке. Эта строка извлекается с помощью отдельного экземпляра cmd
(это позволяет избежать проблемы времени, связанной с чтением for /f
длинных списков данных), поэтому for /f
читает только одну строку.
Поскольку строки robocopy
содержат дату, время и имя файла, для получения этого последнего поля мы запрашиваем у for /f
два токена: один, содержащий час (будет сохранен в %%a
), и оставшийся текст до конца строки ( хранится в %%b
)
Дополнительный for %%r
включен только для предотвращения обычной проблемы с использованием robocopy
. Поскольку мы цитируем пути, чтобы предотвратить проблемы с пробелами, нам нужно убедиться, что пути не заканчиваются обратной косой чертой, которая будет экранировать закрывающую кавычку пути и приведет к сбою команды.
person
MC ND
schedule
19.12.2018
|
в качестве разделителя? Имена файлов Windows не могут содержать их, поэтому вы можете использовать"Delims="
. - person Compo   schedule 19.12.2018"delims="
или"tokens=*"
не меняет результата. - person alexleen   schedule 19.12.2018dir
отсортирует файлы в каждом каталоге по дате. Он не отсортирует все файлы по дате. Для этого вам нужно будет вывести дату файла в формате ГГГГММДД с именем файла и отсортировать файл. - person Squashman   schedule 19.12.2018