打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
批处理将文件重命名为文件修改时间(精确到秒)
批处理将文件重命名为文件修改时间(精确到秒) 本帖最后由 powerbat 于 2012-3-7 22:41 编辑


支持拖放、支持子目录、支持设置要修改的文件类型(这些功能很简单,可自行添加代码),兼容特殊字符。
@echo off &rem powerbat @ www.bathome.net 批处理之家 bat脚本
set "type=jpg,png" &rem 文件类型
set "folder=%~dp0." &rem 文件所在目录
set "SubDir=0" &rem 是否包含子目录

wmic.exe /? >nul 2>&1 || (echo no wmic, exit& pause&exit/b)

if "%~1" neq "" set "folder=%~1"
for %%a in ("%folder%") do set "FileD=%%~da" & set "FileP=%%~pnxa\"

goto skip
rem 先重命名一次,加一段文件名中不会出现的字符串,以防可能的文件名重复问题。
set "ext=%type%" & set "sub="
if "%type%" neq "*" if "%type%" neq "*.*" set "ext=*.%type:,= *.%"
if "%SubDir%" neq "0" set "sub=/s"
for /f "delims=" %%a in ('dir /b %sub% %ext%') do (
ren "%%~fa" "powerbat@bathome_%%~nxa"
)
:skip

set "part=%FileP:\=\\%"
set "part=%part:[=[[]%"
set "part=%part:_=[_]%"
setlocal enableDelayedExpansion
set "part=!part:%%=[%%]!"
endlocal& set "part=%part%"
if "%type%" neq "*" if "%type%" neq "*.*" (
set "ext=and (extension='%type:,=' OR extension='%')"
) else set "ext="
if "%SubDir%"=="0" (
set "Filter=drive='%FileD%' and path='%FileP:\=\\%' %ext%"
) else (
set "Filter=drive='%FileD%' and path LIKE '%part%%%' %ext%"
)
(set wmic=wmic.exe datafile where "%Filter%" get name^,LastModified)

for /f "tokens=1,3* delims=.+ " %%a in ('%%wmic%%') do (
set "t=%%a"
rem 用for过滤掉wmic结果中的不可见字符
for /f "delims=" %%i in ("%%c") do (
set "f=%%~fi"
set "p=%%~dpi"
set "n=%%~ni"
set "x=%%~xi"
setlocal enableDelayedExpansion
set "t=!t:~,4!-!t:~4,2!-!t:~6,2! !t:~8,2!.!t:~10,2!.!t:~12!"
if not exist "!p!!t!!x!" (
ren "!f!" "!t!!x!"
) else if "!t!" neq "!n!" (
set n=1
for %%u in ("!p!!t!_*!x!") do set /a n+=1
ren "!f!" "!t!_!n!!x!"
)
endlocal
)
)
pause
复制代码
批处理在特殊字符方面有天生缺陷,所以用批处理要做到兼容特殊字符就有点吃力,效率不怎么高。
重命名时要考虑到的一个重点是判断是否存在重复文件名,由于cmd没有while循环语句,要达到类似效果只能借助标签,但这样会进一步降低效率。
在兼顾效率的基础上,这是采用的方法是先将所有文件修改为别的名字,彻底排除重复的可能性。(默认没有开启,将goto skip去掉即可启用)。

(批处理做这种事真是弱暴了。。。但我不想用vbs,虽然我会)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
用批处理对文件批量重命名
.bat批处理(五):遍历指定目录下资源文件并更新
windows 批处理获取路径下最新的文件并备份
bat批量修改文件名
【Dos】复制指定文件夹下所有文件到另外指定文件夹下
分别以单、双数数列批量重命名
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服