У меня есть окно Windows и папка, содержащая такие файлы:
2010-07-04 20:18 81 in01_Acct_20100704001.r
2010-07-07 05:45 165 in01_Acct_20100706001.r
2010-07-07 19:41 82 in01_Acct_20100707001.r
2010-07-07 10:02 81 in01_Acct_20100707002.r
2010-07-08 08:31 89 in01_Acct_20100708001.r
2010-07-10 04:51 82 in01_Acct_20100709001.r
и я хочу использовать пакет для периодического перемещения всех этих файлов в другую папку, кроме самой новой (например, in01_Acct_20100709001.r), потому что этот файл иногда все еще записывается, и его перемещение может привести к переопределению файла в папке назначения в следующем запуск пакета и приводит к потере содержимого файла.
Будем очень признательны за любые идеи по этому поводу.
Публикация ответа Суяо здесь:
for /F "skip=1" %f IN ('dir /TW /O-D /A-D /B') DO move %f wherever
Простое объяснение состоит в том, что в команде DIR есть встроенная сортировка по дате.
/T (has W implied would work as well) sorts based on time Last Written
/O sets the order, -D = By Date/Time, in reverse order
/A-D only entries that are NOT directories (hence files)
/B returns simply the filename
«Skip = 1» означает, что код должен игнорировать возвращенную самую верхнюю строку, и, поскольку файлы были упорядочены правильно, это будет самый последний файл.