在Windows系统中,如何批量重命名多个文件并去除括号?

14

我想对大量文件进行重命名,使它们按数字递增的顺序排列,可以从任何位置开始。 但是当我重命名多个文件时,会在文件名后面添加括号。 例如:我将文件重命名为abc_.jpeg,结果变成了abc_(1).jpeg、abc_(2).jpeg等。

我尝试使用命令提示符进行重命名

ren abc_(*).jpeg abc_*.jpeg
不起作用。可能是因为括号的原因。

ren abc_"("*")".jpeg abc_*.jpeg
重命名文件,但结果与之前相同。 我只想以某种方式删除括号。

4个回答

17

要去掉括号,您将需要进行一些字符串操作。我已经编写了一个批处理文件来执行此操作(保存为.bat)。

cd C:\folder
setlocal enabledelayedexpansion
for %%a in (abc_*.jpeg) do (
set f=%%a
set f=!f:^(=!
set f=!f:^)=!
ren "%%a" "!f!"
)

我不认为你可以轻松地在命令行中用一行代码完成这个任务,虽然可能是可行的,但结果可能并不理想。如果可以的话,最好使用这个批处理文件来删除括号。


1
这个解决方案将删除所有括号。如果在下划线之前有其他括号,那可能会成为一个问题。 - dbenham
1
谢谢。我想是这样,但我只是根据OP所要求的需求进行回答。如果变得更加复杂,我会留给你处理 :) - Bali C
如何在不使用括号的情况下重命名文件夹中的所有文件? - Web Designer cum Promoter
1
@ApexFred 在另外两行下面添加这一行:set f=!f:^ =! - Gam
1
@BaliC 哎呀,我没注意到它(;^ω^)谢谢! - Ogiad
显示剩余3条评论

12
在文件资源管理器窗口中,选择所有文件,右键单击并选择重命名。 Windows将选择起始数字作为圆括号之间提供的数字,因此请使用比所需位数多1位的数字来命名文件。 示例:我们想要模式“test_xxx”。使用文件资源管理器将文件重命名为“tes(1000)”。“tes(1000)”现在的文件名为["tes(1000)", "tes(1001)", "tes(1002)",等等]。按住SHIFT并右键单击文件资源管理器的空白区域,然后选择“在此处打开命令窗口”。输入以下命令:
ren *.* test_???.*

这将把所有文件重命名为正确的格式["test_000","test_001","test_002"等]。


5
非常好的解决方案,因为它只有一行代码。然而,在 Windows 10 上,“在此处打开命令窗口”被替换为“在此处打开 PowerShell”。要在 PowerShell 中实现相同效果,请使用 $nr=1; Dir | %{Rename-Item $_ -NewName ("test_{0:000}$($_.Extension)" -f $nr++)} ,其中 $n=1 初始化计数器为 1。如果要从更高的索引开始,请改用 $n=100 等其他数字。 - Maddin

7

虽然来晚了一点,但这里有一个同时去除括号和自动删除空格的组合方式。此代码通过在包含所有要修改的文件的文件夹中放置.bat文件来实现。

请将以下代码复制并粘贴到记事本中,并将其保存为sequentialFileNameCleaner.bat。

您的文件名必须与第一行sequentialFileNameCleaner.bat中所写的相同。也就是说,如果您想更改文件名,可以手动更新第一行。

:sequentialFileNameCleaner  [/R]  [FolderPath]
setlocal enabledelayedexpansion
for %%a in (*.jpg) do (
set f=%%a
set f=!f:^(=!
set f=!f:^)=!
ren "%%a" "!f!"
)
@echo off
setlocal disableDelayedExpansion
if /i "%~1"=="/R" (
  set "forOption=%~1 %2"
  set "inPath="
) else (
  set "forOption="
  if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
)
for %forOption% %%F in ("%inPath%* *") do (
  if /i "%~f0" neq "%%~fF" (
    set "folder=%%~dpF"
    set "file=%%~nxF"
    setlocal enableDelayedExpansion
    echo ren "!folder!!file!" "!file: =!"
    ren "!folder!!file!" "!file: =!"
    endlocal
  )

)

默认情况下,此代码仅定位 .jpg 文件。在第三行中,将 (*.jpg) 更改为 (*.png)(*.mp4) 或任何您想要的扩展名都可以使代码兼容。


0
当我们需要将一组包含括号的文件名传递给脚本时,问题就出现了。以下代码可以解决这个问题。在这个例子中,我们将括号替换为下划线。
SET fileList=%*
SET delim1=aaaaaaaaaaaaa
SET delim2=zzzzzzzzzzzzz
setlocal enabledelayedexpansion
SET fileList=!fileList:^(=%delim1%!
SET fileList=!fileList:^)=%delim2%!
FOR %%f in (%fileList%) DO (
 SET f1=%%~f
 SET f1=!f1:%delim1%=^(!
 SET f1=!f1:%delim2%=^)!
 SET f2=%%f
 SET f2=!f2:%delim1%=_!
 SET f2=!f2:%delim2%=_!
 FOR %%i IN (!f2!) DO RENAME "!f1!" "%%~nxi"
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接