【问题标题】:How to rename multiple files in directory?如何重命名目录中的多个文件?
【发布时间】:2015-04-23 10:22:18
【问题描述】:

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

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

我需要从他们那里剪掉.cpython-33一块,即重命名后的文件必须是这样的

injector.pyo
PregnancyMegaMod.pyo

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

【问题讨论】:

  • 您要求使用 DOS。也许标记 PowerScript 并要求它,你需要一些时间来学习它,但我认为你会从中受益。
  • DOS REN 命令无法处理此问题。您正在使用长文件名,这表明您在 Windows 上,这表明 PowerShell 可用。是吗?
  • 没区别,dos还是PS...各种方式都有可能...
  • 这是 PowerShell 中的单行代码,但根据合同,除非您正确标记并提出问题,否则我们无法帮助您。如果您想知道如何在 PowerShell 中执行此操作,请相应地编辑您的问题。否则一些可怜的灵魂将不得不通过一个批处理文件来完成它。
  • 已完成帖子的版本。

标签: powershell batch-file scripting


【解决方案1】:

解决办法是

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

【讨论】:

  • 优秀,甚至比我想象的还要短。 :-) 不过,您可能希望使用"*.cpython-33.pyo" 作为过滤器,否则它将毫无意义地尝试重命名已经正常的文件。
  • 太棒了!接受你自己的答案,这样问题就会得到答案。
【解决方案2】:

假设所有文件都没有额外的点(换句话说,没有像“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/批处理脚本。它是纯脚本,可​​以在 XP 以后的任何 Windows 机器上本地运行。

jren "\.cpython-33\.pyo$" ".pyo" /i

【讨论】:

    【解决方案3】:
    @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 这一行。

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

    【讨论】:

    • 您可以在第一个 FOR 语句中使用 "%sourcedir%\*.cpython-33.pyo" 消除对 IF 的需求。该文件掩码无法匹配 8.3 的短名称,因此它应该是安全的。
    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 2012-12-27
    • 2021-03-28
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2021-05-10
    相关资源
    最近更新 更多