DOS批处理脚本 - 将目录重命名为最新文件的日期

时间:2012-07-11 21:27:34

标签: batch-file

这是我的情况。我有几百个文件夹(在Windows XP下), 每个都包含几个.jpgs。所有文件夹的名称 当我意外地选择了所有文件夹时,我搞砸了 重命名其中一个的过程。

我要做的是编写一个DOS批处理脚本 遍历每个文件夹,确定修改日期 目录中的最新文件&将文件夹重命名为该日期 YYYY-MM-DD格式。因此:

Directory of C:\Work_Area\Messed_up_dir_name

07/11/2012  10:01 AM    <DIR>          
07/11/2012  10:01 AM    <DIR>          
03/10/2008  11:00 AM           176,640 image1.jpg
08/07/2007  02:27 PM            25,088 image2.jpg
04/12/2007  04:52 PM           132,608 image3.jpg
02/06/2007  06:11 PM            61,086 image4.jpg

成为"C:\Work_Area\2008-03-10\"

这是我到目前为止所写的......

@echo off   
REM ITERATE THROUGH EACH DIRECTORY
FOR /F "DELIMS==" %%d in ('DIR "%ROOT%" /AD /B') DO ( 
    ECHO %%d
    cd %%d
    REM DETERMINE NEWEST FILE
    FOR /F %%a in ('DIR /O:-D /B') DO @ECHO %%~ta
    cd ..     
    REM echo Newest=%Newest%    
    REM move "%%f" "%Newest%"           
    pause   
)

显然,日期中的斜杠需要更改为另一个字符 为了使这成功。如果有人能帮我解决这个问题,那就好了 非常感谢!

1 个答案:

答案 0 :(得分:3)

此脚本将重命名目录树的文件夹,该目录树的根目录在脚本的第一个参数中指定(%1)。我编写了脚本以满足第2条评论中指定的要求。

写入的脚本实际上将回显将运行的重命名命令。当准备重命名为真实时,只需从REN前面删除ECHO命令。

如果同级文件夹的最新修改文件具有相同的时间戳,则至少有一次重命名将失败。

此脚本也无法重命名不包含任何文件的文件夹。

@echo off
setlocal disableDelayedExpansion
if "%~1" neq "" pushd %1
for /f "eol=: delims=" %%D in ('dir /s /b /ad ^| sort /r') do call :renameFolder "%%D"
exit /b

:renameFolder
pushd %1
for /f "eol=: delims=" %%F in ('dir /b /a-d /o-d') do (
  for /f "tokens=1-4* delims=/: " %%A in ("%%~tF") do (
    popd
    echo ren %1 "%%C-%%A-%%B %%D.%%E"
    exit /b
  )
)