我想根据创建日期而不是基于旧文件名对文件进行编号。
示例:假设以创建日期的降序列出以下文件。
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文件。
感谢您的帮助。
答案 0 :(得分: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%"
)
请注意,所包含的样本都不会以任何方式处理重复文件名的可能性。