尝试编写脚本以使用 .bat 更改文件名的结尾

Posted

技术标签:

【中文标题】尝试编写脚本以使用 .bat 更改文件名的结尾【英文标题】:Trying to write a script to change the end of file names with a .bat 【发布时间】:2022-01-07 10:21:45 【问题描述】:

我有一堆文件需要重命名。它们是可变长度的。像这样:

A1B2C3D4.en.fr.pdf
A1B2C3D4S8.it.fr.pdf
A1B2C3.de.fr.pdf
A1B2C3D4E5.zn.fr.pdf

我想更改它们,以便我可以运行 .bat 文件进行 2 项更改: 使用静态前缀 XYZ10 作为前缀; 替换以静态 FRFR.pdf 结尾的 .*.fr.pdf 变量;。 所以它们看起来像这样:

XYZ10A1B2C3D4FRFR.pdf
XYZ10A1B2C3D4S8FR.pdf
XYZ10A1B2C3FRFR.pdf
XYZ10A1B2C3D4E5FRFR.pdf

我每次都使用 power shell 以单独的步骤进行操作,但继续这样做很痛苦,有时会做得不正确。

我试过了:

@echo off
ren *.??.fr.pdf *.FRFR.pdf

但这只是让它们看起来像这样:

A1B2C3D4E5.zn.fr.FRFR.pdf

我不知道从哪里开始前缀,我真的不明白我一直在读的任何关于它的东西......

编辑: 这就是我一直在 PowerShell 中添加前缀的方法。

目录 *.pdf | rename-item -newname "XYZ10"+ $_.Name

【问题讨论】:

for /F "tokens=1* delims=." %%i in ('dir /b "*.??.fr.pdf"') do ren "%%~i.%%~j" "%%~iFRFR%%~xj" 我会使用一个类似的、更完整、更健壮的一个衬里,@For /F "EOL=? Delims=" %%G In ('"(Set PATHEXT=) & %SystemRoot%\System32\where.exe ".":"*.??.fr.pdf" 2>NUL"') Do @For %%H In ("%%~nG") Do @For %%I In ("%%~nH") Do @Ren "%%G" "XYZ10%%~nIFRFR%%~xG" 谢谢,它有效。我将查找其中使用的术语,以便了解它是如何工作的。 【参考方案1】:

没有简单的ren 命令行可以根据需要重命名(浏览完整的帖子How does the Windows RENAME command interpret wildcards?)。我会这样做:

rem // Loop through all relevant files:
for /F "delims= eol=|" %%K in ('dir /B /A:-D-H-S "*.??.fr.pdf"') do (
    rem // `%%K` is the full file name, `%%~nK` has got `.pdf` removed, `%%~xK` is `.pdf`.
    for %%J in ("%%~nK") do for %%I in ("%%~nJ") do (
        rem // `%%~nJ` has got `.fr.pdf` removed, `%%~nI` has got `.??.fr.pdf` removed.
        rem // Actually rename the file (complaints in case of conflicts):
        ren "%%K" "XYZ10%%~nIFRFR%%~xK"
    )
)

【讨论】:

以上是关于尝试编写脚本以使用 .bat 更改文件名的结尾的主要内容,如果未能解决你的问题,请参考以下文章

win bat日志清除脚本

windows设置SpringBoot程序(bat脚本)开机自启

打开.bat文件脚本后如何保持cmd运行

ubuntu怎么保存shell脚本文件

我是否可以使用bat脚本从一个闪存驱动器将文件夹安装到具有特定名称并更改驱动器的另一个闪存驱动器

bat文件成功运行但是会弹出找不到文件