尝试编写脚本以使用 .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 更改文件名的结尾的主要内容,如果未能解决你的问题,请参考以下文章
windows设置SpringBoot程序(bat脚本)开机自启