Как переименовать несколько файлов после сортировки по дате создания?
Я хочу нумеровать файлы по дате создания, а не по старым именам файлов.
Пример: предположим, что следующие файлы перечислены в порядке убывания даты создания.
A.jpg
D.jpg
B.jpg
C.jpg
Я хочу переименовать эти файлы так, чтобы
A.jpg becomes 4.jpg
D.jpg becomes 3.jpg
B.jpg becomes 2.jpg
C.jpg becomes 1.jpg
Я использую Windows 8 и отсортировал файлы в папке на основе даты создания. Однако, когда я пытаюсь переименовать файлы, DOS игнорирует сортировку и продолжает переименовывать файлы на основе старых имен файлов.
Таким образом,
A.jpg becomes 1.jpg
D.jpg becomes 4.jpg
B.jpg becomes 2.jpg
C.jpg becomes 3.jpg
Я использую следующий код (файл.bat), полученный из другого поста на этом сайте.
@Echo Off
setLocal EnableDelayedExpansion
set oldext=jpg
set newext=jpg
set index=0
for %%f IN (*.%oldext%) do (
set /A index+=1
set index=!index!
ren "%%f" "!index!.%newext%"
)
У меня не установлено никаких скриптовых инструментов, и я создаю только базовые BAT-файлы с помощью блокнота.
Спасибо за вашу помощь.
1 ответ
В файловых системах FAT файлы не упорядочены, они размещаются так, как они включены в папки. В NTFS файлы расположены в алфавитном порядке. Вы можете изменить способ отображения файлов, но не физический порядок.
for
циклы будут перебирать файлы в том же порядке, в котором они хранятся. Если вам нужно выполнить итерацию в другом порядке, вам нужно будет создать список в нужном вам порядке и выполнить итерацию по этому списку.
@echo off
setlocal enableextensions disabledelayedexpansion
set "oldext=jpg"
set "newext=jpg"
set "index=0"
for /f "delims=" %%a in ('dir /a-d /b /od "*.%oldext%"') do (
set /a "index+=1"
setlocal enabledelayedexpansion
for %%b in (!index!) do endlocal & ren "%%~fa" "%%b.%newext%"
)
Здесь dir
Команда используется для вывода списка файлов в нужном порядке, а затем этот список повторяется for /f
команда.
Внутренний setlocal enabledelayedexpansion / endlocal
включен для обработки файлов с !
символы в его именах. Если вы знаете, что это никогда не будет вашим делом, вы можете напрямую использовать
@echo off
setlocal enableextensions enabledelayedexpansion
set "oldext=jpg"
set "newext=jpg"
set "index=0"
for /f "delims=" %%a in ('dir /a-d /b /od "*.%oldext%"') do (
set /a "index+=1"
ren "%%~fa" "!index!.%newext%"
)
Обратите внимание, что ни один из включенных примеров никоим образом не обрабатывает возможность дублирования имен файлов.