File rename 批处理:如何批量重命名文件(接近)?

File rename 批处理:如何批量重命名文件(接近)?,file-rename,batch-file,bulk-operations,File Rename,Batch File,Bulk Operations,我见过有人在Perl中这样做,但我想知道是否有一种方法可以通过批处理来完成?它内置于Windows中,因此我认为知道如何使用批处理脚本来实现这一点会更有用。它不需要在计算机上安装任何东西 输入名称示例:myFile_55 一个示例输出模式:将myFile更改为picture,并将数字减少13。 输出示例:picture_42 你将如何处理这个问题?我知道要重命名的批处理命令: ren myFile_55图片_42 因此,如果我有一个名为renamer.bat的文件,我可以添加以下内容: 对于%1

我见过有人在Perl中这样做,但我想知道是否有一种方法可以通过批处理来完成?它内置于Windows中,因此我认为知道如何使用批处理脚本来实现这一点会更有用。它不需要在计算机上安装任何东西

输入名称示例:myFile_55 一个示例输出模式:将myFile更改为picture,并将数字减少13。 输出示例:picture_42

你将如何处理这个问题?我知道要重命名的批处理命令:

ren myFile_55图片_42

因此,如果我有一个名为renamer.bat的文件,我可以添加以下内容:

对于%1中的/r%%x,请执行%%x%2

然后我可以键入以下命令:

rename.bat myfile*图片*


不过,我不知道如何减少数字。

您可能可以将原始文件名通过for循环,提取名称和数字,对数字进行计算,然后用新名称和数字将其重新插入。只要文件名格式为name\u number,您就可以使用:

REM Allow for numbers to be iterated within the for-loop i.e. the i - z
SETLOCAL ENABLEDELAYEDEXPANSION
SET i=0
SET z=13
SET newName=picture
SET workDir=C:\Path\To\Files

REM Given that filenames are in the format of 'Name_number', we're going to extract 'number
REM and set it to the i variables, then subtract it by 13, then rename the original file
REM to what the newName_x which if the filename was oldName_23 it would now be newName_10
FOR /r %%X in (%1) do (
  FOR /F "tokens=1-2 delims=_" %%A IN ("%%X") DO (
    SET i=%%B
    SET /A x=!i! - %z%

    REM ~dpX refers to the drive and path of the file
    REN "%%~dpX\%%A_%%B" "%newName%_!x!"
  )
)

编辑:编辑REN命令以包括原始文件的驱动器和路径。将小写x更改为大写x,以避免混淆%%~dpX。

您可能可以将原始文件名通过for循环,提取名称和数字,对数字进行计算,然后用新名称和数字将其重新插入。只要文件名格式为name\u number,您就可以使用:

REM Allow for numbers to be iterated within the for-loop i.e. the i - z
SETLOCAL ENABLEDELAYEDEXPANSION
SET i=0
SET z=13
SET newName=picture
SET workDir=C:\Path\To\Files

REM Given that filenames are in the format of 'Name_number', we're going to extract 'number
REM and set it to the i variables, then subtract it by 13, then rename the original file
REM to what the newName_x which if the filename was oldName_23 it would now be newName_10
FOR /r %%X in (%1) do (
  FOR /F "tokens=1-2 delims=_" %%A IN ("%%X") DO (
    SET i=%%B
    SET /A x=!i! - %z%

    REM ~dpX refers to the drive and path of the file
    REN "%%~dpX\%%A_%%B" "%newName%_!x!"
  )
)

编辑:编辑REN命令以包括原始文件的驱动器和路径。将小写x改为大写x,以避免混淆%%~dpX。

查看set/?在cmd中。我认为set/a会成批处理数字,这样您就可以在for循环中使用它来减去数字。@balic如果我想将所有文件重命名为附加了文件夹名,该怎么办?我认为这是一个有趣的话题。我想有一个好的答案,然后把它放到维基上,这样我们就可以讨论所有不同类型的文件名更改算法。我不确定你会怎么做,但我同意这是一个有趣的话题。希望一些批处理专家能对此有所帮助!另外,谢谢你的命令。我正在查。看看set/?在cmd中。我认为set/a会成批处理数字,这样您就可以在for循环中使用它来减去数字。@balic如果我想将所有文件重命名为附加了文件夹名,该怎么办?我认为这是一个有趣的话题。我想有一个好的答案,然后把它放到维基上,这样我们就可以讨论所有不同类型的文件名更改算法。我不确定你会怎么做,但我同意这是一个有趣的话题。希望一些批处理专家能对此有所帮助!另外,谢谢你的命令。我正在查找。您可以只使用一个SET命令:SET/ax=%%B-%z%,而不是前两个命令。@mechaflash您能解释一下这些行吗?批处理对我来说非常困难。您可以只使用一个SET命令:SET/ax=%%B-%z%,而不是前两个命令。@mechaflash您能解释一下这些行吗?这批货对我来说非常难跟上。