批量重命名文件保持子串并添加mm和yy

时间:2014-07-14 01:26:26

标签: date batch-file substring rename

我有一系列具有长文件名的文件。对于包含连字符的每个文件名,我希望将子字符串保留在位置6-8,将 _FM07_FY14.prn 附加到名称,并忽略原始文件名的其余部分。新的扩展名现在是.prn。两位数字07表示月份,14表示年份。月份和年份可以从"创建日期"属性。如果你能告诉我如何从创建的日期自动捕获这个mm和yy,我将不胜感激。硬编码这部分也没关系,因为我可以按创建的日期对文件进行排序,并将它们放在单独的文件夹中。

例如

aaaaaD07.dfdd-1234.A.b.1233新文件名将 D07 _FM01_FY14.prn

bbcbaA30dls-d343.a.123d新文件名 A30 _FM01_FY14.prn

cdq0dG12ir3-438d.dfd.txt新文件名 G12 _FM01_FY14.prn

这是我在这里阅读了很多帖子后想出的.bat文件,而且我不知道如何提取mm和yy以便我对其进行硬编码。我不熟悉Powershell。我只能处理.bat或.cmd文件并在命令提示符下运行它。任何和所有帮助将受到高度赞赏。谢谢!

@ECHO OFF
SETLOCAL


for %%F in (*.*) do (
 SET "name=%%a"  
 set "var=_FM01_FY14.prn"

 ren *-*  "%name:~6,8%var%"
)

*endlocal*

2 个答案:

答案 0 :(得分:0)

谢谢Ton。我会查看Total Commander。

我四处寻找并找到了一种不同的编码和解决问题的方法。在原始代码中,我正在寻找从位置6到8开始的子字符串。附加var时会出现语法错误。在这个新代码中,相同的要求,不同的方法:新文件名从位置编号6的3个字符开始,并直接附加文本 _FM07_FY14.prn 而不是使用变量。

如果有人可以帮我解决如何自动检索 mm yy 来替换 07 14 (从创建日期或最后更新日期开始, 7月,年份 2014 ,这将是非常棒的。否则,这是代码有效。免费评论/解释它是如何工作的 - 对于那里的其他初学者:)非常感谢你!

  

@ECHO OFF   SETLOCAL ENABLEDELAYEDEXPANSION

for %%F in (*.*) do (
    set name="%%F"
    ren *-* "!name:~6,3!_FM07_PY14.prn"
)
     

ENDLOCAL

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\one"
PUSHD %sourcedir%
FOR /f "delims=" %%a IN (
 'dir /b /a-d "*" '
 ) DO (
 SET name=%%a
 SET fdate=%%~ta
 ECHO(REN "%%a" "!name:~5,3!_FM!fdate:~3,2!_FY!fdate:~8,2!.prn"
)
popd

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

我用于日期的格式为dd/mm/yyyy如果您的格式不同,则需要更改!fdate:~m,2!短语中的偏移量。 m的值是第一个字符的日期字符串的偏移量(第二个参数是要选择的字符数。)

为了测试目的,所需的REN命令仅为ECHO在您确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。