按创建日期排序后如何重命名多个文件?

时间:2015-07-05 14:28:47

标签: date batch-file rename dos numbered

我想根据创建日期而不是基于旧文件名对文件进行编号。

示例:假设以创建日期的降序列出以下文件。

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 个答案:

答案 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%"
    )

请注意,所包含的样本都不会以任何方式处理重复文件名的可能性。