如何使用批处理脚本根据时间戳重命名文件?

如何使用批处理脚本根据时间戳重命名文件?

假设我每天在 D:\Temp 下有 10 个系统生成的文件。名称是随机生成的。

假设我需要将最旧的一个重命名为“aaa”,将第二旧的重命名为“bbb”,然后重命名为“ccc”、“ddd”等等。

假设这些是我将使用的目标名称:

Beijing
shanghai
hangzhou
suzhou
newyork
lanzhou
huzhou
guangzhou
tianjin
sichuang

有人能帮助使用批处理脚本来完成这个任务吗?

我确实问过这个问题昨天并使用 PowerShell 给出了一个很好的答案,但今天我注意到在公司的 VM 中我没有安装 PowerShell(不允许自己安装),因此需要再次发布问题,以便已经回答的人可以保留他们的(接受)投票。

答案1

@echo off
setlocal disableDelayedExpansion
set "file1=aaa"
set "file2=bbb"
set "file3=ccc"
set "file4=ddd"
set "file5=eee"
set "file6=fff"
set "file7=ggg"
set "file8=hhh"
set "file9=iii"
set "file10=jjj"

for /f "tokens=1,2* delims=: " %%A in (
  'wmic datafile where "drive='d:' and path='\\temp\\'" get creationDate^, name ^| findstr "^[0-9]" ^| sort ^| findstr /n "^"'
) do for /f "delims=" %%F in ("%%C") do (
  setlocal enableDelayedExpansion
  for %%N in ("!file%%A!") do (
    endlocal
    ren "%%F" %%N
  )
)

\如果要更改路径,则必须确保所有“as”都加倍\\,并确保路径以“as”开头和结尾\\。驱动器选项中必须出现相应的驱动器号(带冒号)。

驱动器和路径值都必须用单引号引起来 - WMIC 使用 SQL 语法。

答案2

这应该对你有用。它将 26 个文件重命名为aaazzz最早的创建日期在前。查看输出并删除该echo命令(如果可以的话)。

@echo off&setlocal
set "startfolder=D:\temp"
set "alphas=abcdefghijklmnopqrstuvwxyz"
cd /d "%startfolder%"

set /a counter=0
for /f "tokens=3*" %%a in ('dir /a-d /od /tc ^| findstr "^[0-9]"') do set "fname=%%b"&call:process
goto:eof

:process    
setlocal enabledelayedexpansion
set "nname=!alphas:~%counter%,1!!alphas:~%counter%,1!!alphas:~%counter%,1!"
if not defined nname goto:eof
echo rename "%fname%" "!nname!"
endlocal
set /a counter+=1
goto:eof

如果您的dir命令显示带有 AM/PM 的时间,请设置tokens=4*

相关内容