我想对大量文件进行重命名,使它们按数字递增的顺序排列,可以从任何位置开始。 但是当我重命名多个文件时,会在文件名后面添加括号。 例如:我将文件重命名为abc_.jpeg,结果变成了abc_(1).jpeg、abc_(2).jpeg等。
我尝试使用命令提示符进行重命名
ren abc_(*).jpeg abc_*.jpeg
不起作用。可能是因为括号的原因。
ren abc_"("*")".jpeg abc_*.jpeg
重命名文件,但结果与之前相同。
我只想以某种方式删除括号。
要去掉括号,您将需要进行一些字符串操作。我已经编写了一个批处理文件来执行此操作(保存为.bat
)。
cd C:\folder
setlocal enabledelayedexpansion
for %%a in (abc_*.jpeg) do (
set f=%%a
set f=!f:^(=!
set f=!f:^)=!
ren "%%a" "!f!"
)
我不认为你可以轻松地在命令行中用一行代码完成这个任务,虽然可能是可行的,但结果可能并不理想。如果可以的话,最好使用这个批处理文件来删除括号。
ren *.* test_???.*
这将把所有文件重命名为正确的格式["test_000","test_001","test_002"等]。
$nr=1; Dir | %{Rename-Item $_ -NewName ("test_{0:000}$($_.Extension)" -f $nr++)}
,其中 $n=1
初始化计数器为 1。如果要从更高的索引开始,请改用 $n=100
等其他数字。 - Maddin虽然来晚了一点,但这里有一个同时去除括号和自动删除空格的组合方式。此代码通过在包含所有要修改的文件的文件夹中放置.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)
或任何您想要的扩展名都可以使代码兼容。
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"
)