【问题标题】:Batchjob for changing the date format in a filename用于更改文件名中日期格式的批处理作业
【发布时间】:2021-06-30 10:14:56
【问题描述】:

希望有人可以帮助我。

我需要一个 .bat 来执行以下操作:

  • 一直在文件夹“A”中运行

  • 等待文件以下列格式出现: 1_33530_Jim_Hutchinson_m_23.04.1965_20210628-163636_D-Endo14.pdf

  • 将文件重新格式化为 1_33530_Jim_Hutchinson_m_19650423_20210628-163636_D-Endo14.pdf

  • 将新文件写入文件夹 B

在文件名中,日期格式应从 DD.MM.YYYY 更改为 YYYYMMDD 其他所有内容 之前和之后应该保持不变

如何使用循环批处理作业来做到这一点?

提前致以诚挚的问候和感谢 斯文

【问题讨论】:

  • 在 [batch-file] 标签下发布了数百个问题和答案,它们使用特定字符拆分字符串。您可以使用下划线分隔出生日期部分,然后使用句点更改分隔字符串的出生日期顺序。您需要付出更多努力并通过调整搜索结果中的一种或多种方法自己尝试完成任务。本网站每个页面的顶部都有一个搜索框。还请使用tour,并阅读How to Ask 的链接页面,然后在edit 提出您的问题之前添加minimal reproducible example

标签: batch-file filenames


【解决方案1】:

将文件名 1_33530_Jim_Hutchinson_m_23.04.1965_20210628-163636_D-Endo14.pdf 拆分为三部分。分隔符是点。

使用字符串替换将 1_33530_Jim_Hutchinson_m_23 拆分为 1_33530_Jim_Hutchinson_m_ 和 23

set filename1=!temp_var1:~0,-2!
set day=!temp_var1:~-2!

使用字符串替换将 1965_20210628-163636_D-Endo14 拆分为 1965 和 _20210628-163636_D-Endo14

set year=!temp_var2:~0,4!
set filename2=!temp_var2:~4!

新建文件名

set new_filename=!filename1!!year!!month!!day!!filename2!.pdf

完整代码

setlocal ENABLEDELAYEDEXPANSION
for %%f in (*.pdf) do (
  for /f "delims=. tokens=1,2,3" %%a in ("%%f") do (
    

    set temp_var1=%%a
    set month=%%b
    set temp_var2=%%c

    set filename1=!temp_var1:~0,-2!
    set day=!temp_var1:~-2!
    set year=!temp_var2:~0,4!
    set filename2=!temp_var2:~4!

    set new_filename=!filename1!!year!!month!!day!!filename2!.pdf

    copy %%f B\!new_filename!
  )
)

【讨论】:

  • 巧妙(ab)使用名称格式。您可以通过将tokens=1,2,3 更改为tokens=1,2,* 来避免重新应用扩展(其中* = “无需进一步标记即可获取所有其余部分”)
猜你喜欢
  • 2022-10-13
  • 1970-01-01
  • 2013-08-03
  • 2019-04-09
  • 2020-08-23
  • 2022-01-16
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多