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

Batch job remove timestamp in a filename with date and time stamp

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

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

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

期望的结果是截断时间戳,只保留文件名 YYYMMDD:

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

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

我的评论的扩展:

@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

注意:以上内容并非针对您的具体使用情况编写,只是以可测试的方式演示原理,以便您能够适应您的需求。

这里有一个稍微更完整的版本,它假定您的目标文件实际上有一个您在问题中没有告诉我们的扩展名。 (我已经使用 .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
)