这是我的情况。我有几百个文件夹(在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
)
显然,日期中的斜杠需要更改为另一个字符 为了使这成功。如果有人能帮我解决这个问题,那就好了 非常感谢!
答案 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
)
)