Windows批处理文件,如何重命名和删除部分文件名

Posted

技术标签:

【中文标题】Windows批处理文件,如何重命名和删除部分文件名【英文标题】:Windows Batch File, how to rename and remove part of filename 【发布时间】:2018-11-14 17:10:00 【问题描述】:

我正在尝试重命名目录中的一组文件,这些文件都包含我稍后要删除的文件名的一部分。 名字的例子是:

    123876.111thepartIwanttoremove.exe thisisatestfile.111thepartIwanttoremove.exe

    this?392!.111thepartIwanttoremove.exe

    thankyouall.222thepartIwanttoremove.exe

    test.222thepartIwanttoremove.exe whatis@d354.222thepartIwanttoremove.exe

我的代码是:

forfiles /S /M *.111thepartIwanttoremove.exe /C "cmd /c rename @file @fname.doc"
ren ???.111thepartIwanttoremove.* ???.doc
ren ????.111thepartIwanttoremove.* ????.doc
ren ?????.111thepartIwanttoremove.* ?????.doc (and so on)

forfiles /S /M *.222thepartIwanttoremove.exe /C "cmd /c rename @file @fname.jpg"
ren ???.222thepartIwanttoremove.* ???.jpg
ren ????.222thepartIwanttoremove.* ????.jpg
ren ?????.222thepartIwanttoremove.* ?????.jpg (and so on)

举个例子,我想要文件:

123876.111thepartIwanttoremove.exe

看起来像这样:

123876.doc

之后我可以使用什么函数来删除名称的 .*thepartIwanttoremove.exe 部分而不用“?”写这么多行?

非常感谢您的帮助。

【问题讨论】:

变量扩展和替换是您可以使用的功能。您可能希望使用循环来执行此操作,并且根据循环类型可能会使用延迟扩展。 How to replace substrings in windows batch file的可能重复 请发布真实数据。目前尚不清楚是否需要从名称中删除某些特定字符串,或者名称在扩展名的前 3 个字符之后被截断,或者在扩展名中的第一个数字字符串之后被截断。实际上,您的示例是 .exe 文件,但您的代码面向 .jpg 文件。 真实数据。扩展名为三个数字的文件 (123876.111thepartIwanttoremove.exe) 必须重命名为 .doc 文件,而具有三个数字的文件 (thankyouall.222thepartIwanttoremove.exe) 必须重命名为 .jpg 文件但没有中间部分。 123876.111thepartIwanttoremove.exe ---> 123876.docthankyouall.222thepartIwanttoremove.exe --->thankyouall.jpg 绝对不需要 FORFILES。您最初问题中的示例使您看起来需要在第一个句点之后保留前三个数字。但是现在您在评论中的示例是在第一期之后放弃所有内容。如果是这种情况,您可以利用 FOR 命令中命令修饰符的强大功能。 【参考方案1】:

假设所有文件的文件名由句点分隔的三个部分组成,这种代码风格应该适合你。

for /F "tokens=1-3 delims=." %%G in ('dir /a-d /b *.111*.exe') do rename "%%G.%%H.%%I" "%%G.doc"
for /F "tokens=1-3 delims=." %%G in ('dir /a-d /b *.222*.exe') do rename "%%G.%%H.%%I" "%%G.jpg"

【讨论】:

这段代码在我运行批处理文件的同一目录中运行良好。其他目录呢。是否可以在“C:\”中运行此命令来查看所有目录? @MathiusBacharus,它可以做到,但它完全改变了代码,因为如果单个目录名称中有句点,结果将不正确。我将不得不用嵌套的FOR 命令完全重写它。 当您还想搜索子目录时,可以将dir /a-d 替换为dir /S /a-d(添加-S 会搜索子目录)。 @Dominique 你读过我关于如果目录名称有句点会发生什么的评论。 @Squashman:我不明白:我刚刚创建了一个目录“test.test.test”,并在其中创建了一个名为“file.txt”的文件。从主目录我启动dir /S file.txt 并找到它,所以我不明白你的问题。【参考方案2】:

我有大量此类文件

123.jpg@fsfsadsada
456.jpg@po2wmdwvni
asd.mp4@fstewdsada
qwe.mp4@u5i34dwvni

是否可以以某种方式删除 @ 字符,然后使用批处理文件(那些具有正常的 .jpg 和 .mp4 扩展名)?

我把这个https://***.com/a/50702324修改成了这个

for /F "tokens=1-3 delims=." %%G in ('dir /a-d /b *.jpg@*') do rename "%%G.%%H.%%I" "%%G.jpg"
for /F "tokens=1-3 delims=." %%G in ('dir /a-d /b *.mp4@*') do rename "%%G.%%H.%%I" "%%G.mp4"

但是如果我运行这个批处理,它只会说“系统找不到指定的文件”。

怎么了?

【讨论】:

以上是关于Windows批处理文件,如何重命名和删除部分文件名的主要内容,如果未能解决你的问题,请参考以下文章

windows批处理文件重命名

使用批处理解压缩和重命名文件 (Windows)

批处理如何去掉/删除文件名中的指定字符

使用 Windows 批处理脚本重命名目录中的所有文件

使用 Windows 批处理脚本重命名目录中的所有文件

如何编辑一个windows bat批处理文件 删除多余的文件名和后缀