批处理作业删除带日期和时间戳的文件名中的时间戳

时间:2020-08-07 20:14:24

标签: batch-file timestamp filenames

在一个文件夹中,我有很多文件名,例如:

ABC.DEF.GHI.YYYYMMDDhhmmss
JKL.MNO.PQR.YYYYMMDDhhmmsss

(不确定为什么有时时间戳基于24小时会有9位数字)

理想的结果是截断时间戳,仅使用YYYMMDD保留文件名:

ABC.DEF.GHI.YYYYMMDD 
JKL.MNO.PQR.YYYYMMDD 

如何在脚本批处理文件Windows(非Linux)中执行此操作? 非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我的评论的扩展:

@Echo Off & Setlocal EnableDelayedExpansion
Set "FILENAME.EXT=%~1"
For /F "Delims=" %%X in ("!FILENAME.EXT!") Do for %%F in ("%%~nX") Do (Set "_DT=%%~xF" & Set "_FN=%%~nF.!_DT:~1,8!")
Echo/!_FN!
Endlocal & Exit /B

注意:以上内容并未针对您的确切使用情况编写脚本,仅以可测试的方式演示了该原理,使您能够适应自己的需求。

答案 1 :(得分:1)

这是一个稍微更完整的版本,它假定您的目标文件实际上具有扩展名,您在问题中忽略了要告诉我们的扩展名。 (我已将.csv用于演示目的,只需根据需要对其进行更改)

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F Delims^=^ EOL^= %%G In ('Dir /B /A:-D "<.<.<.>>>>>>>>>>>>>>>.csv"') Do (
    For %%H In ("%%~nG") Do (
        Set "DateStamp=%%~xH"
        SetLocal EnableDelayedExpansion
        Ren "%%G" "%%~nH!DateStamp:~,9!%%~xG"
        EndLocal
    )
)

[编辑/]

根据您的澄清,文件创建软件未为其分配扩展名,因此可以简化代码:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F Delims^=^ EOL^= %%G In ('Dir /B /A:-D "<.<.<.>>>>>>>>>>>>>>>"') Do (
    Set "DateStamp=%%~xG"
    SetLocal EnableDelayedExpansion
    Ren "%%G" "%%~nG!DateStamp:~,9!"
    EndLocal
)
相关问题