我有一系列具有长文件名的文件。对于包含连字符的每个文件名,我希望将子字符串保留在位置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*
答案 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
以实际重命名文件。