如何重命名目录中的多个文件?

How to rename multiple files in directory?

我在目录中有很多文件,名称类似于

injector.cpython-33.pyo
PregnancyMegaMod.cpython-33.pyo

我需要从中剪下 .cpython-33 部分,即重命名文件后必须像

injector.pyo
PregnancyMegaMod.pyo

如何编写批处理文件或 PowerShell 脚本?

解决方案是

Get-ChildItem -Filter "*.pyo" -Recurse | Rename-Item -NewName {$_.name -replace '.cpython-33','' }

假设 none 个文件有额外的点(换句话说,没有像 "a.b.cpython-33.pyo" 这样的文件),那么您可以使用如下内容:

ren *.cpython-33.pyo" "??????????????????????????????????????????.pyo"

.cpython=33.pyo" 之前的最长名称必须与 ? 一样多。有关详细信息,请参阅 How does the Windows RENAME command interpret wildcards?

如果可能还有其他点,那么您可以使用我的 JREN.BAT utility - 一个混合 JScript/batch 脚本,它使用正则表达式替换执行重命名操作。它是纯脚本,可​​以在任何 Windows 从 XP 开始的机器上本机运行。

jren "\.cpython-33\.pyo$" ".pyo" /i
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR %%a IN ("%sourcedir%\*.pyo") DO FOR %%b IN ("%%~na") DO IF /i "%%~xb"==".cpython-33" ECHO(REN "%%~fa" %%~nb.pyo"
GOTO :EOF

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

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

显然,方法的关键是 for %%a 行。

对于所选目录中与掩码匹配的每个文件,获取名称部分,并使用该名称部分提取 "name" 部分。如果 "extension" 部分是预期的字符串,则构建重命名命令。