假设我每天在 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 个文件重命名为aaa
,zzz
最早的创建日期在前。查看输出并删除该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*
。