batch-file - 如何使用批处理文件将文件重命名为增量顺序?
问题描述
我有多个文件:
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
解决方案
这是我现在有时间的最佳解决方案:
@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
文件,如果文件已经存在,12345678.pdf
我们什么也不做,然后我们用空格分隔它们的名称,即实际数字后面的空格,但在左括号之前。然后我们只取最后一个字符(8)加上括号之间的数字,减去 1。
上面的输出只是echo
ren 的输出,所以 removeecho
来实际执行 ren 任务。
编辑
在评论和问题中您的要求发生变化后,现在更容易实现,因为我们取整个数字加上括号中的数字,再减去 1:
@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 /a newname=minname+num
echo ren "%%i" !newname!%%~xi
)
)
这将增加整个数字范围,增加整个范围,这比您需要的第一个解决方案更有意义。
推荐阅读
- json.net - c# - 将动态属性名称反序列化为 c# 类
- c# - 包含通用类型类列表的类
- c++ - 在 C++11 线程中,std::mutex 对内存可见性有什么保证?
- java - 无法在 IntelliJ 的调试模式下输入方法?
- loopbackjs - 环回休息连接头授权
- javascript - Javascript Pacman 风格的游戏 - 无法在水平路径中存储分数
- python-3.x - 当实例由函数确定时,如何在 Python 中设置实例属性?
- css - CSS - 当从左到右移动而不是从右到左移动时,根据悬停元素闪烁的自定义光标
- java - Firebase:如何在删除键后按顺序获取键
- node.js - Electron、TypeScript、SQLite:未找到 package.json