本帖最后由 aloha20200628 于 2024-6-4 21:50 编辑
回复 1# kimpppg
仅用纯P的for循环变量的时间属性值,拿不到秒级精度,改用powershell是一个捷径,只是其首启略慢...
以下代码存为test.bat,运行时可直接把目标目录托给test.bat即可,运行结果是将目标目录(包括子目录)中的全部非隐藏文件更名,其格式如 20240605211842.jpg,如果发现重名,其格式如 20240605211842_1.jpg;代码第7行数字9管控重名序号范围 1-9,该值可调整;test.bat应与目标目录分开否则亦被更名;代码第2行采用临时文件,考虑若更名目录包含文件过多,则dir文件简报不宜置于for循环条件表达式中,以免降速或被阻塞。
- @echo off &if "%~1"=="" exit/b
- pushd "%~1" &dir /b/s/a-d>"%temp%\pF.lst"
- for /f "usebackq delims=" %%F in ("%temp%\pF.lst") do (
- for /f %%t in (' powershell "(ls """%%~F""").creationTime.tostring("""yyyyMMddHHmmss""")" ') do (
- if not exist "%%~dpF%%t%%~xF" (ren "%%F" "%%t%%~xF") else (
- set "x=1"
- for /L %%n in (1,1,9) do if defined x if not exist "%%~dpF%%t_%%n%%~xF" (set "x="&ren "%%F" "%%t_%%n%%~xF")
- )
- )
- )
- del/q "%temp%\pF.lst" &popd &pause &exit/b
复制代码
|