在 Windows 中使用索引保留批量重命名文件

Posted

技术标签:

【中文标题】在 Windows 中使用索引保留批量重命名文件【英文标题】:Rename file in batch with index retain in Windows 【发布时间】:2021-04-25 10:45:20 【问题描述】:

我有一批格式如下的文件

YYYYYYYYYY(X).txt

YYYYYYYYYY(XX).txt

YYYYYYYYYY(XXX).txt

YYYYYYYYYY(XXXX).txt

Y是简体字/标点符号,没有固定长度,即没有。 Y 的范围从几个到超过 10

X 是数字 (0-9)

我想重命名所有文件并删除所有前面的Y。 cmd可以使用什么命令?

【问题讨论】:

请阅读 Stack Overflow tour,并阅读 What should I do when someone answers my question?,了解如何正确评价您提交的问题答案。您可以通过单击相应答案左侧的灰色大复选标记 来接受答案。另请参阅How does accepting an answer work?网站算法将没有接受答案的问题视为未回答,无论这些答案的数量或质量如何,谢谢! 【参考方案1】:

这里有一些未经测试的快速示例代码,应该将YYYYYYYYYY(X).txt 重命名为(X).txtYYYYYYYYYY(XX).txt(XX).txtYYYYYYYYYY(XXX).txt(XXX).txt,以及YYYYYYYYYY(XXXX).txt(XXXX).txt受限于不存在的匹配名称,这正是您的问题所要求的。

@For %%G In ("C:\Users\Gary\Documents\?*(*).txt") Do @(
    Set "=%%~nG" & SetLocal EnableDelayedExpansion
    Ren "%%G" "(!:*(=!%%~xG" & EndLocal)

这里有一些额外的未经测试的示例代码,应该将YYYYYYYYYY(X).txt 重命名为X.txtYYYYYYYYYY(XX).txtXX.txtYYYYYYYYYY(XXX).txtXXX.txt,以及YYYYYYYYYY(XXXX).txtXXXX.txt受限于不存在的匹配名称

For %%G In ("C:\Users\Gary\Documents\*(*).txt") Do (
    Set "f=%%~nG"
    SetLocal EnableDelayedExpansion
    Set "n=!f:*(=!"
    Ren "%%G" "!n:~,-1!%%~xG"
    EndLocal
)

【讨论】:

【参考方案2】:

[未经测试]

for /f "delims=" %%b in ('dir /b /a-d "d:\the path\*(*).txt" ') do (
 for /f "tokens=2delims=()" %%c in ("%%b") do ren "d:\the path\%%b" "%%c%%~xb")

【讨论】:

社区鼓励在代码中添加解释,而不是纯粹基于代码的答案(参见here)。 @costaparas:当我像过去一样发布完整的解释时(请参阅我的 3,700 多条回复中的许多),我将我认为相关的 cmets 和提示包含在 pre-清空不可避免的后续问题。不幸的是,我有过这样的经历,即最近的回复被我认为有用但可能不是基本信息的信息被两个从未见过的在此标签中执行的成员破坏规则”。我要求版主回滚,但被拒绝,将已删除的内容描述为“离题元评论”。 这是在审查 low quality posts 时出现的。我标记为看起来不错,并留下评论表明它将受益于一些评论,就像在 SO 上通常一样。我不能代表其他人采取的行动,但你应该能够在没有版主帮助的情况下编辑自己的帖子(除非它被锁定或其他什么?)。 @costaparas :另一方面,如果我不添加解释,我的帖子会被建议删除并被否决 - 不是因为它在技术上是错误的,而是因为我破坏了其他一些“规则”与解决问题无关。该死的如果你这样做,如果你不该死。 @costaparas:因为破坏者只是进入了一场回滚战争,所以不得不去模组

以上是关于在 Windows 中使用索引保留批量重命名文件的主要内容,如果未能解决你的问题,请参考以下文章

批量重命名文件并保留最后一个破折号

在 Windows 7 中使用 REN 批量重命名文件(添加前缀)

windows dos 批量重命名文件

windows dos 批量重命名文件

linux下的文件操作——批量重命名

windows下使用cmd重命名文件名