按创建日期排序后如何重命名多个文件?
How do I rename multiple files after sorting by creation date?
我想根据创建日期而不是旧文件名对文件进行编号。
示例:假设以下文件按创建日期的降序排列。
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
我正在使用从本网站的另一个 post 获得的以下代码(.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 文件。
感谢您的帮助。
在 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%"
)
请注意,包含的示例中 none 以任何方式处理重复文件名的可能性。
我想根据创建日期而不是旧文件名对文件进行编号。
示例:假设以下文件按创建日期的降序排列。
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
我正在使用从本网站的另一个 post 获得的以下代码(.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 文件。
感谢您的帮助。
在 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%"
)
请注意,包含的示例中 none 以任何方式处理重复文件名的可能性。