在 Windows 上使用 cmd 减少文件名中的数字

Posted

技术标签:

【中文标题】在 Windows 上使用 cmd 减少文件名中的数字【英文标题】:decrement of a number in filename with cmd on windows 【发布时间】:2021-11-29 12:56:01 【问题描述】:

我有一堆文件:

CAR_003.dat
CAR_003.obj
CAR_004_prev0.png
CAR_004_prev1.png
CAR_004_tex0.tga

我需要将它们重命名为:

CAR_002.dat
CAR_002.obj
CAR_003_prev0.png
CAR_003_prev1.png
CAR_003_tex0.tga

如何在 Windows 上使用 cmd 批量执行此操作?

【问题讨论】:

你试过什么,你卡在哪里了?请edit您的帖子并提供minimal reproducible example您的编码尝试!也可以使用tour,访问help center 并阅读How to Ask! 【参考方案1】:

您需要在您想要的目录中执行以下批处理。 它将重命名树中的所有内容。

@ECHO off
SETLOCAL EnableDelayedExpansion

FOR /R %%f in (CAR*) DO (
  FOR /F "usebackq tokens=1,2,* delims=_" %%m in ('%%~nxf') do (
    SET      filePath=%%~dpf
    SET    filePrefix=%%m_
    SET /a fileNumber=1%%~nn-1001
    SET    fileNumber=000!fileNumber!
    SET    fileNumber=!fileNumber:~-3!
    SET    filePosfix=%%~no
    SET       fileExt=%%~xf
    IF [!filePosfix!] EQU [] ( 
      SET    fileRest=%%~xf
    ) ELSE ( 
      SET    fileRest=_!filePosfix!!fileExt!
    )
    REM ECHO %%f
    REM ECHO !filePath!!filePrefix!!fileNumber!!fileRest!
    REM ECHO ~~~~~~~
    MOVE "%%f" "!filePath!!filePrefix!!fileNumber!!fileRest!"
  )
)

【讨论】:

我不明白为什么 *** 允许您在发表评论之前回答问题... 如果填零的数字是 008 或 009,您的代码将失败。这在 set 命令的帮助文件中有明确说明。我假设 Microsoft 将它放在帮助文件中,供不了解十进制和八进制之间区别的人使用。 我根据这个人的例子编写代码。聊天就是为了这个,如果他什么都不说,我想他的目标是可以的。 ..我现在已经将八进制转换固定到999...但是他现在可以来这里说它不适用于1000,那么我将再次修复为1000009999-1000000001?呵呵 不幸的是,这不起作用。它说:文件移动:0。无效的数字。数字常量可以是十进制 (17)、十六进制 (0x11) 或八进制 (021)。系统找不到指定的路径。对于每个文件。我在一个文件夹中有很多文件,但 CAR_ 之后的数字始终在 001-688 之间。除了后缀“prev”和“tex”之后的示例之外,没有其他数字。 CAR_ 之后的数字始终由 3 位数字组成。 @AntonShmetelko 如果您使用的是代码的最新版本,则不应出现该错误。新代码工作得很好。我已经验证过了。

以上是关于在 Windows 上使用 cmd 减少文件名中的数字的主要内容,如果未能解决你的问题,请参考以下文章

cpp exe文件在wsl上工作但在windows10 cmd上不工作

windows的cmd命令

windows用cmd命令进入文件夹目录

如何在 windows(cmd) 上使用 composer 运行 phpunit 测试 [重复]

windows如何用cmd命令解压指定的zip文件到指定目录里?

如何在 Windows 上隐藏文件?