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

[日期时间] 请教大侠, 如何使用批处理给特定的文件或文件夹添加日期和时间

[复制链接]
发表于 2021-5-5 19:56:49 | 显示全部楼层 |阅读模式
本帖最后由 5i365 于 2021-5-6 01:24 编辑

大家好,
有时需要手动给文件和文件夹添加时间后缀, 要看日期和时间一下, 不知道能不能用批处理简单的实现,提前感谢

将当前目录下, _开头的TXT文件或文件夹名字后面添加当前的日期和时间
例如, 当前目录下
有两个文件
_abc.txt
_123.txt
有两个文件夹
_bcd
_234
双击批处理时, 日期和时间是5月4号18点25分, 执行批处理后文件和文件夹的名字变成了:
_abc_05-04_18-25.txt
_123_05-04_18-25.txt
_bcd_05-04_18-25
_234_05-04_18-25

当第二次双击批处理时, 日期和时间是5月4号20点20分, 执行批处理后文件和文件夹的名字从上面的名字变成了:
_abc_05-04_20-20.txt
_123_05-04_20-20.txt
_bcd_05-04_20-20
_234_05-04_20-20
发表于 2021-5-5 21:05:38 | 显示全部楼层
文件(目录)名称中不能包含英文半角冒号。
 楼主| 发表于 2021-5-6 01:25:06 | 显示全部楼层
回复 2# WHY


    感谢提醒, 已更正!
发表于 2021-5-6 21:33:32 | 显示全部楼层
  1. @echo off
  2. PowerShell "$dt=(get-Date).ToString('_MM-dd_HH-mm'); dir _* | ?{($_ -is [IO.FileInfo] -and $_.Extension -eq '.txt') -or $_ -is [IO.DirectoryInfo]} | ren -NewName {($_.BaseName -replace '(?>_\d\d-\d\d){2}$') + $dt + $_.Extension}"
  3. pause
复制代码
 楼主| 发表于 2021-5-7 06:20:57 | 显示全部楼层
回复 4# WHY


    药到病除,立竿见影, 非常感谢!
 楼主| 发表于 2021-5-7 07:42:05 | 显示全部楼层
本帖最后由 5i365 于 2021-5-7 07:43 编辑

回复 4# WHY


你好, 刚刚尝试改一下文件名中的时间格式
以前是
_name_MM-dd_HH-mm
现在是
_name_MM.dd-HH.mm
这样看起来,更直观一些

我改成的代码是:
PowerShell "$dt=(get-Date).ToString('_MM.dd-HH.mm'); dir _* | ?{($_ -is [IO.FileInfo] -and $_.Extension -eq '.txt') -or $_ -is [IO.DirectoryInfo]} | ren -NewName {($_.BaseName -replace '(?>_\d\d\.\d\d){2}$') + $dt + $_.Extension}"

第一次执行的结果是对的, 而第二次执行后,名字是追加上的,没有替换成功, 应该是正则部分有错误, 对正则不太懂, 能指点一下吗? 非常感谢!
发表于 2021-5-7 09:28:36 | 显示全部楼层

  1. (?>(.\d\d\){4}$)
复制代码
 楼主| 发表于 2021-5-7 09:44:19 | 显示全部楼层
回复 7# newswan


    你好, 感谢回复, 上面的表达式不知道加在什么地方, 对下面这句代码, 不明白什么意思,

ren -NewName {($_.BaseName -replace '(?>_\d\d-\d\d){2}$') + $dt + $_.Extension}
发表于 2021-5-7 09:49:07 | 显示全部楼层
本帖最后由 newswan 于 2021-5-7 10:26 编辑
  1. PowerShell "$dt=(get-Date).ToString('_MM-dd_HH-mm'); dir _* | ?{($_ -is [IO.FileInfo] -and $_.Extension -eq '.txt') -or $_ -is [IO.DirectoryInfo]} | ren -NewName {($_.BaseName -replace '(?>(.\d\d)+)$') + $dt + $_.Extension}"
复制代码
那一句就是 重命名 三部分

($_.BaseName -replace '(?>(.\d\d)+)$')
$dt
$_.Extension
 楼主| 发表于 2021-5-7 13:11:15 | 显示全部楼层
回复 9# newswan

感谢帮忙,
下面的代码,对文件名是有效的, 但是对文件夹有问题   
PowerShell "$dt=(get-Date).ToString('_MM.dd-HH.mm'); dir _* | ?{($_ -is [IO.FileInfo] -and $_.Extension -eq '.txt') -or $_ -is [IO.DirectoryInfo]} | ren -NewName {($_.BaseName -replace '(?>(.\d\d)+)$') + $dt + $_.Extension}"

结果:
文件名:
_新建文本文_05.07-13.09
文件夹名:
_CMD_05.07-13.09.08
发表于 2021-5-7 23:28:39 | 显示全部楼层
本帖最后由 WHY 于 2021-5-7 23:30 编辑

回复 10# 5i365


    假设文件夹名称为 _CMD
第一次重命名变成 _CMD_05.07-13.09
第二次重命名时,.09 被当做扩展名,正则表达式 '(?>(.\d\d)+)$' 仍然匹配 BaseName,即 _CMD_05.07-13,造成重命名错误。

先重命名文件,再重命名文件夹。
  1. @echo off
  2. PowerShell "$reg='_\d\d\.\d\d-\d\d\.\d\d$'; $dt=(get-Date).ToString('_MM.dd-HH.mm'); dir _* | ?{$_ -is [IO.FileInfo] -and $_.Extension -eq '.txt'} | ren -NewName{($_.BaseName -replace $reg) + $dt + $_.Extension}; dir _* | ?{$_ -is [IO.DirectoryInfo]} | ren -NewName{($_.Name -replace $reg) + $dt}"
  3. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 非常不错

查看全部评分

发表于 2021-5-8 03:32:06 | 显示全部楼层
个人习惯,日期时间格式 mmdd-HHMM
 楼主| 发表于 2021-5-8 11:31:08 | 显示全部楼层
回复 11# WHY


    非常感谢!
 楼主| 发表于 2021-5-10 09:22:56 | 显示全部楼层
回复 11# WHY


    你好, 今天执行批处理报错了,不知道问题出在哪儿了
发表于 2021-5-10 10:50:18 | 显示全部楼层
这个用纯批也能实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 16:06 , Processed in 0.019722 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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