批處理將文件重命名為文件修改時間(精確到秒) 本帖最后由 powerbat 于 2012-3-7 22:41 編輯
支持拖放、支持子目錄、支持設(shè)置要修改的文件類型(這些功能很簡單,可自行添加代碼),兼容特殊字符。
@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 先重命名一次,加一段文件名中不會出現(xiàn)的字符串,以防可能的文件名重復(fù)問題。
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結(jié)果中的不可見字符
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
復(fù)制代碼
批處理在特殊字符方面有天生缺陷,所以用批處理要做到兼容特殊字符就有點(diǎn)吃力,效率不怎么高。
重命名時要考慮到的一個重點(diǎn)是判斷是否存在重復(fù)文件名,由于cmd沒有while循環(huán)語句,要達(dá)到類似效果只能借助標(biāo)簽,但這樣會進(jìn)一步降低效率。
在兼顧效率的基礎(chǔ)上,這是采用的方法是先將所有文件修改為別的名字,徹底排除重復(fù)的可能性。(默認(rèn)沒有開啟,將goto skip去掉即可啟用)。
(批處理做這種事真是弱暴了。。。但我不想用vbs,雖然我會)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。