Как автоматически переименовать сортировку файлов по дате, созданных в Windows, с помощью пакетного файла

#windows #batch-file #echo #windows-server-2012-r2

#Windows #пакетный файл #echo #windows-server-2012-r2

Вопрос:

Моя ОС — Windows

Мой файл:

 FILENAME DATECREATED
Jack.txt 3 AM
John.txt 4 AM
Mary.txt 5 AM
Paul.txt 1 AM
  

Итак, как автоматически переименовывать файлы в массовом порядке сортировка по дате, созданная с помощью этого шаблона:

Ожидаемый результат:

 FILENAME    DATECREATED
1. Paul.txt 1 AM
2. Jack.txt 3 AM
3. John.txt 4 AM
4. Mary.txt 5 AM
  
  • Paul.txt заменяется на «1. Paul.txt » потому что этот файл создается первым
    (в 1 час ночи).
  • Mary.txt заменяется на «4. Mary.txt » потому что этот файл создается последним (в 5 утра)

Я слышал, что для этой проблемы есть некоторые сценарии, но я тоже не уверен

Любая помощь будет оценена

Спасибо

Ответ №1:

сначала расположите файлы в правильном порядке ( /od сортирует по дате / времени, /a-d исключает имена папок, /b перечисляет только имена файлов. dir /? Подробнее см.).
Затем пронумеруйте их (подключив к findstr /N . findstr /? Подробнее см.).
Затем используйте for /f цикл, чтобы разделить выходные данные на число и имя файла и собрать их в соответствии с вашими потребностями ( for /? подробнее см.)

 @echo off
for /f "tokens=1,* delims=:" %%a in ('dir /od /a-d /b ^|findstr /N "^"') do ECHO ren "%%b" "%%a. %%b"
  

ПРИМЕЧАНИЕ: я «отключил» ren команду, просто повторив ее. Когда результат вас удовлетворит, просто удалите ECHO .

Комментарии:

1. Большое вам спасибо, я попробовал, и это сработало, НО … результат обратный, самый старый — последний, а не первый Paul.txt заменяется на «4. Paul.txt » вместо «1. Paul.txt » К счастью, ты говоришь мне, чтобы я увидел реж /? для получения подробной информации я запустил dir /? и нашел ответ, что dir / o-d должен быть только dir / od, но спасибо за хорошие ответы 🙂

Ответ №2:

Спасибо Стефану за просвещение

Это пакетный скрипт для решения этой проблемы,

 @echo off
for /f "tokens=1,* delims=:" %%a in ('dir /od /a-d /b ^|findstr /N "^"') do ren "%%b" "%%a. %%b"