我有多个文件:
12345678 (1).pdf
12345678 (2).pdf
12345678 (3).pdf
12345678 (4).pdf
12345678 (5).pdf
数字12345678
是可变的。目前,我有代码
cd C:\folder
setlocal enabledelayedexpansion
for %%a in (*.pdf) do (
set f=%%a
set f=!f:^(=!
set f=!f:^)=!
ren "%%a" "!f!"
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
)
)
)
这会将文件名更改为以下
123456781.pdf
123456782.pdf
123456783.pdf
123456784.pdf
123456785.pdf
结果是根据先前生成的文件使文件递增
12345678.pdf
12345679.pdf
12345680.pdf
12345681.pdf
12345682.pdf
答案 0 :(得分:0)
这是我目前有时间的最佳解决方案:
template <typename T>
logger & operator<<(T const &value) {
for (auto &stream : streams) {
stream.get() << value;
}
return *this;
}
我的测试结果是:
@echo off
setlocal enabledelayedexpansion
for %%i in (*.pdf) do (
for /f "tokens=1,2" %%a in ("%%i") do (
set num=%%b
set num=!num:%%~xb=!
set num=!num:^(=!
set num=!num:^)=!
set /a num=!num!-1
set "minname=%%a"
set lastchar=!minname:~-1!
set newname=!minname:~0,-1!
set /a cnt=+1
set /a fin=!lastchar!+!num!
echo ren "%%i" "!newname!!fin!%%~xi"
)
)
因此,我们首先获取所有ren "12345678 (1).pdf" "12345678.pdf"
ren "12345678 (2).pdf" "12345679.pdf"
ren "12345678 (3).pdf" "123456710.pdf"
....
个文件,如果文件已经存在pdf
,则不执行任何操作,然后我们将其名称按空格分隔,即实际数字后的空格,但开括号。那么我们只取最后一个字符(为8)并加上括号之间的数字减去1。
上方的输出仅12345678.pdf
代表ren的输出,因此请删除echo
以实际执行ren任务。
编辑
在您的需求更改后,注释和问题变得更容易实现,因为我们将整数加括号中的数字减去-1:
echo
这将使整个范围扩大,从而使整个范围扩大,这比您需要的第一个解决方案更有意义。