Board logo

标题: [日期时间] [文件管理] 批处理将文件重命名为文件创建时间(精确到秒) [打印本页]

作者: kimpppg    时间: 2024-6-4 15:43     标题: [文件管理] 批处理将文件重命名为文件创建时间(精确到秒)

我搜了一下,找到一个改成修改时间的。自学了一下, 没找到改哪里。 所以,请求一下帮助。这个怎么改成创建时间。
支持拖放、支持子目录、支持设置要修改的文件类型(这些功能很简单,可自行添加代码),兼容特殊字符。批处 ...
powerbat 发表于 2012-3-7 21:15

作者: smss    时间: 2024-6-4 18:10

  1. @Echo off&SetLocal EnableDelayedExpansion
  2. for /r %%i in (*)do set t=%%~ti&set t=!t:/=!&set t=!t: =!&set t=!t::=!&if "%%i" neq %0 ren "%%i" !t!%%~xi
  3. pause
复制代码

作者: kimpppg    时间: 2024-6-4 20:32

回复 2# smss


    好用,很快。但好像是改成修改时间。
作者: aloha20200628    时间: 2024-6-4 21:29

本帖最后由 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循环条件表达式中,以免降速或被阻塞。
  1. @echo off &if "%~1"=="" exit/b
  2. pushd "%~1" &dir /b/s/a-d>"%temp%\pF.lst"
  3. for /f "usebackq delims=" %%F in ("%temp%\pF.lst") do (
  4. for /f %%t in (' powershell "(ls """%%~F""").creationTime.tostring("""yyyyMMddHHmmss""")" ') do (
  5. if not exist "%%~dpF%%t%%~xF" (ren "%%F" "%%t%%~xF") else (
  6. set "x=1"
  7. 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")
  8. )
  9. )
  10. )
  11. del/q "%temp%\pF.lst" &popd &pause &exit/b
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2