Назад | Перейти на главную страницу

Как переместить в папку все файлы, кроме самого нового?

У меня есть окно 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» означает, что код должен игнорировать возвращенную самую верхнюю строку, и, поскольку файлы были упорядочены правильно, это будет самый последний файл.