[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] [已解决]批处理如何根据文件名中的日期字符串修改文件的创建日期?

本帖最后由 youngway 于 2017-6-29 09:35 编辑

有如下文件列表,文件名是以文件日期来命名的:040924.185821苹果.jpg
040924.185823波罗的海香蕉.jpg
040924.185827曼陀罗花.jpg
040924.185829西红柿.jpg
040924.190417梨.jpg
040925.061152.jpg
040927.092619月季.jpg
…………
110319.102358静物.jpg
遇到的问题是这些文件的创建日期(时间)被修改了,现在想批量把文件名中的时间信息重新更新到每个文件中,请教如何操作?
找到了这位朋友的工具:http://www.bathome.net/thread-8242-1-1.html
TimeBack 1.0 文件时间控制
作者:Xinje
E-mail:[email=xinje@126.com]xinje@126.com[/email]
/F [文件名]  设置欲更改或查看文件时间的文件名。
/T [日期时间] 欲更改的时间型数据。
   时间范围:1980.1.1 1:1:1 至2107.12.31 23:59:58
   比如:
   2010年6月16日12时5分5秒
   2010.6.16.12.5.5
   2010/6-16/12-5/5
控制参数:(可同时存在)
    -C  根据/T设置,更改创建时间
    -R  根据/T设置,更改修改时间
    -V  根据/T设置,更改访问时间
举例:
    TimeBack /F c:\xinje.txt /T 2010/6/16/12/5/5 -C -R -V
    修改xinje.txt的创建、修改、访问时间为2010年6月16日12时5分5秒

文件名如果嫌不规范,可以预先修改成
2004.09.24.18.58.21苹果.jpg
…………
等,但后面的汉字不能丢。
请教各位,拜谢。
======================================
2017.06.29更新:
三楼WHY大神给出了代码,但由于个人愚钝,一开始并未领会,走了一点弯路,最后已经完美解决。
======================================
总结:
修改jpg创建时间:
dir *.jpg | ?{$_ -is [IO.FileInfo] -and $_.Name -match '^(\d{2})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})'} | %{$a = $matches; $_.CreationTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]}
修改jpg最后修改时间:
dir *.jpg | ?{$_ -is [IO.FileInfo] -and $_.Name -match '^(\d{2})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})'} | %{$a = $matches; $_.LastWriteTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]}
修改jpg最后访问时间:
dir *.jpg | ?{$_ -is [IO.FileInfo] -and $_.Name -match '^(\d{2})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})'} | %{$a = $matches; $_.LastAccessTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]}
一并修改三个时间:
dir *.jpg | ?{$_ -is [IO.FileInfo] -and $_.Name -match '^(\d{2})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})'} | %{$a = $matches; $_.LastWriteTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]; $_.LastAccessTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6];$_.CreationTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]}
=======================================
收工。感谢WHY大神,几行代码解决大问题,请收下我的膝盖!!

等待大神出手

TOP

  1. dir *.jpg | ?{$_ -is [IO.FileInfo] -and $_.Name -match '^(\d{2})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})'} | %{$a = $matches; $_.CreationTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]}
复制代码
1

评分人数

TOP

回复 3# WHY
大神,请收下我的膝盖!
PS E:\ffoutput> dir *.jpg | ?{$_ -is [IO.FileInfo] -and $_.Name -match '^(\d{2})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})'}
| %{$a = $matches; $_.LastWriteTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]
}
PS E:\ffoutput> dir *.jpg


    目录: E:\ffoutput


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2004/9/24     18:58      29475 040924.185821香蕉.jpg
-a---         2004/9/24     18:58      29670 040924.185823桔子皮.jpg
-a---         2004/9/24     18:58      30693 040924.185827伊斯兰花.jpg
-a---         2004/9/24     18:58      30731 040924.185829杏.jpg
-a---         2004/9/24     19:04      29816 040924.190417.jpg
-a---         2004/9/25      6:11      30188 040925.061152西瓜.jpg


PS E:\ffoutput>
成功更改创建和修改时间。

TOP

回复 3# WHY
更新:
一次性修改目录及子目录下所有jpg文件的三个时间:
dir -rec -filter *.jpg | ?{$_ -is [IO.FileInfo] -and $_.Name -match '^(\d{2})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})'} | %{$a = $matches; $_.LastWriteTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]; $_.LastAccessTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6];$_.CreationTime = '20' + $a[1] + '-' + $a[2] + '-' + $a[3] + ' ' + $a[4] + ':' + $a[5] + ':' + $a[6]}

TOP

返回列表