在一个文件夹中,我有很多文件名,例如:
ABC.DEF.GHI.YYYYMMDDhhmmss
JKL.MNO.PQR.YYYYMMDDhhmmsss
(不确定为什么有时时间戳基于24小时会有9位数字)
理想的结果是截断时间戳,仅使用YYYMMDD
保留文件名:
ABC.DEF.GHI.YYYYMMDD
JKL.MNO.PQR.YYYYMMDD
如何在脚本批处理文件Windows(非Linux)中执行此操作? 非常感谢您的帮助。
答案 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
)