windows - 批处理脚本读取文件的数字部分并用下一个更高的整数重命名
问题描述
我有一个文件,例如-
foofile_1.ext
脚本应该读取文件的数字部分,然后用下一个整数重命名文件,即执行后,文件名应该是
foofile_2.ext
我可以使用C++ / c
应用程序甚至在bash
但不确定如何编写batch
脚本来执行此重命名。之前的文件名_
不会改变,并且_
会出现在文件名中的相同位置。
我可以将文件名剥离为_
,但识别数字是我不熟悉的实现。一旦我识别出数字,我就可以增加它并重命名文件。
解决方案
需要考虑的是,重命名foofile_1.ext
为foofile_2.ext
将失败应该foofile_2.ext
已经存在。解决它的一种方法是按数字降序重命名,我之前在 SO 上发布了类似的答案。
但是,我不会在这里发布相同的答案,也不会链接该答案。但是,我将展示另一种方法:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,*delims=_" %%i in ('dir /b /a-d "*_*.ext"') do (
echo %%~nj | findstr /R /V /C:"[A-Z]">nul && (
set /a numeric=%%~nj+1
ren "%%~i_%%~j" "%%~i_-hld-!numeric!%%~xj"
)
)
for /f "delims=" %%f in ('dir /b /a-d "*_-hld-*.ext"') do (
set "name=%%~f"
ren "%%~f" !name:-hld-=!
)
考虑到您的输入如您所说,并且不包含之前_
的任何地方。这只会采用*_*.ext
格式的每个文件。我们将 the 拆分_
为两个标记的元变量 (%%i
和%%j
) 我们取数值并加一,然后重新加入%%i
pre _
。然而,当您尝试重命名的文件存在时,问题就出现了,因此,首先我们测试是否%%~nj
只有字母字符,使用findstr
(在这个免费代码中不做特殊字符)其次我们给出一个临时添加到名称以防止名称冲突。
完成后,我们只需对包含_-hld-
临时包含的所有文件进行重命名。
推荐阅读
- c++ - QT将标签添加到堆叠小部件的页面
- java - 如何使用反射和接口调用 Kotlin 伴随对象函数
- spring - Spring Boot中Filter的@Component注解有什么意义?
- google-apps-script - 从不同的单元格获取值并通过 googlesheet 脚本设置
- audio - 为什么管道线没有出现?
- config - laravel config/custom.php 更改未更新
- c - 我编译了一个几乎为空的 .c 文件。它的 .text 部分有什么?
- django - 在 Django Rest Framework 中限制用户的多次登录
- azure-pipelines - 如何在 Azure DevOps 管道中使用手动验证任务?
- excel - Excel:如何仅在最大值大于最小值的某个值时突出显示每行的最大值?