根据文件夹中文件的名称批量设置日期时间属性

时间:2012-03-30 15:46:11

标签: batch-file

感谢阅读和可能的答案。

我有一个名为yyyymmddhhMMss.m2ts的文件夹,比如20120330193059.m2ts。实际上它们是索尼摄像机的输出,其中包含缺少元数据的额外文件。

为了使它们得到妥善组织,我需要设置"创建日期"和"日期修改"文件属性根据其文件名,因为那里已经存在所有必要的数据。

我完全远离任何编程或编码,但我想我可以使用我能找到的示例自行编译.cmd。但现在我必须承认我已经失败了。

我知道我必须将文件名转换为变量,将此变量拆分为6个部分,然后将它们作为文件夹中每个文件的文件属性应用。但我无法理解。

有很多关于如何根据时间戳重命名文件的示例,但反之亦然。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您可以尝试下面的批处理文件。首先使用一组测试文件。

@echo off
setlocal EnableDelayedExpansion
set origDate=%date%
set origTime=%time%
for %%f in (*.*) do (
   set fName=%%~Nf
   set fDate=!fName:~4,2!/!fName:~6,2!/!fName:~0,4!
   set fTime=!fName:~8,2!:!fName:~10,2!:!fName:~12,2!
   REM Next line update just "Date Modified" in a fast way:
   REM echo !fDate!| date & echo !fTime!| time & copy "%%f" +,,
   REM Next 4 lines update both "Modified" and "Created" dates, but it is slower:
   echo !fDate!| date & echo !fTime!| time & copy "%%f" "%%~Nf.tmp"
   echo !fTime!| time & copy "%%~Nf.tmp" +,,
   del "%%f"
   ren "%%~Nf.tmp" "%%f"
)
echo %origDate%| date
echo %origTime%| time

此批处理文件要求您具有足以更改系统时钟的凭据。假设echo %date%以MM / DD / YYYY格式显示日期;如果没有,则需要稍加修改。如果要处理的文件数量很大,系统时钟可能会被放回几秒钟;也许您需要在批处理文件结束时手动重置系统时钟。

请报告结果。

编辑:我在上面的同一个商家信息中包含了两部分(修改日期和创建日期)。