找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19862|回复: 5

[日期时间] 请问批处理如何把当前文件夹里所有文件,加上修改日期的前缀呢

[复制链接]
发表于 2023-9-14 15:18:51 | 显示全部楼层 |阅读模式
我自己写了一个bat脚本,
但是运行脚本后,会丢掉修改日期的年和月,只有日,时,分。请问是哪里出的问题呢,谢谢!
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. for %%F in (*) do (
  4.     rem 获取文件的最后修改日期和时间
  5.     for %%a in ("%%~tF") do (
  6.         set "datetime_str=%%~na"
  7.     )

  8.     rem 去掉日期和时间中的空格和冒号,只保留数字部分
  9.     set "formatted_datetime=!datetime_str: =!"
  10.     set "formatted_datetime=!formatted_datetime::=!"
  11.    
  12.     rem 重命名文件
  13.     ren "%%F" "!formatted_datetime!_%%F"
  14. )

  15. endlocal
复制代码
发表于 2023-9-14 15:40:20 | 显示全部楼层
我有个现成的年月日时分秒的代码,给你参考。没有点
  1. @echo off
  2. echo.
  3. echo 年-月-日-小时-分钟-秒
  4. set datevar1=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
  5. echo "%datevar1%.jpg"
  6. echo.
  7. echo 年-月-日
  8. set datevar2=%date:~0,4%%date:~5,2%%date:~8,2%
  9. echo "%datevar2%.jpg"
  10. echo.
  11. echo 小时-分钟-秒
  12. set datevar3=%time:~0,2%%time:~3,2%%time:~6,2%
  13. echo "%datevar3%.jpg"
  14. echo.
  15. echo.
复制代码
发表于 2023-9-14 16:15:05 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. for %%F in (*) do (
  4.     rem 获取文件的最后修改日期和时间
  5.     echo %%~tF
  6.     for %%a in ("%%~tF") do (
  7.         set "datetime_str=%%~na"
  8.         echo set "datetime_str=%%~na"
  9.     )
  10.         pause
  11.     rem 去掉日期和时间中的空格和冒号,只保留数字部分
  12.     set "formatted_datetime=!datetime_str: =!"
  13.     set "formatted_datetime=!formatted_datetime::=!"
  14.    
  15.     rem 重命名文件
  16.     ren "%%F" "!formatted_datetime!_%%F"
  17. )

  18. endlocal
  19. pause
复制代码
发表于 2023-9-14 16:22:08 | 显示全部楼层
日期格式问题?
例如英文系统默认日期连接符是斜杠("/") 2023/09/14
发表于 2023-9-14 16:36:04 | 显示全部楼层
回复 1# nova636


执行这个代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%F in (*) do (
  4.     echo %%~tF
  5.     pause
  6.     for %%a in ("%%~tF") do (
  7.         set "datetime_str=%%~na"
  8.         echo !datetime_str!
  9.         pause
  10.     )
  11. )
复制代码
可以发现结果如下:
2023/09/08 13:51
请按任意键继续. . .
08 13:51
请按任意键继续. . .


内层for循环认为斜线左侧的是文件夹,只有斜线最右侧的是文件名,所以%%~na只能获取到【日 时 分】

在你的代码基础上修改如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%F in (*) do (
  4.     if "%%F" neq "%0" (
  5.         set "datetime_str=%%~tF"
  6.         REM 去掉日期和时间中的空格、冒号、斜线,只保留数字部分
  7.         set "formatted_datetime=!datetime_str: =!"
  8.         set "formatted_datetime=!formatted_datetime::=!"
  9.         set "formatted_datetime=!formatted_datetime:/=!"
  10.         ren "%%F" "!formatted_datetime!_%%F"
  11.     )
  12. )
复制代码
 楼主| 发表于 2023-9-14 20:25:11 | 显示全部楼层
搞定了,谢谢大家。
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. for %%F in (*) do (
  4.     if "%%F" neq "%0" (
  5.         set "datetime_str=%%~tF"
  6.         rem 去掉日期和时间中的空格、冒号、斜线,只保留数字部分
  7.         set "formatted_datetime=!datetime_str: =!"
  8.         set "formatted_datetime=!formatted_datetime::=!"
  9.         set "formatted_datetime=!formatted_datetime:/=!"
  10.         ren "%%F" "!formatted_datetime!_%%F"
  11.     )
  12. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 14:23 , Processed in 0.020927 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表