2015-07-05 38 views
0

我想基于创建日期而不是基于旧文件名来编号文件。如何在按创建日期排序后重命名多个文件?

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

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

注意,没有列入样本以任何方式处理文件名重复的可能性。

相关问题