我需要创建一个批处理文件,将目录中所有文件的总和+250重命名为位于字符串特定位置的特定数字。
我试着用例子来解释一下。
输入文件:
输出文件:
正如您所看到的,我需要更改的字符串中唯一的部分是粗体部分,总计+250。 只是另一个信息......输入文件可以达到的最高数字是010,因此输出文件可以达到的最高数字是260.
提前感谢大家的帮助!!!
答案 0 :(得分:1)
@echo off
rem main cycle
for %%i in (*.gz) do call :rename_to_increased_number %%i
rem finish and go home
goto end
rem "function" rename_to_increased_number - receive one filename and rename it
:rename_to_increased_number
SET FN=%~1
rem FN - is full file name
SET NUMBER=%FN:~18,3%
rem NUMBER - is a part of filename from 18 to 21 symbols
rem correct 009 => 9, 021 => 21:
IF %NUMBER:~0,1%;==0; SET NUMBER=%NUMBER:~1%
IF %NUMBER:~0,1%;==0; SET NUMBER=%NUMBER:~1%
rem receive addition
SET /A BIGNUMBER = %NUMBER% + 250
rem rename old filename to part_before_18,new_number,part_after_21
ren %FN% %FN:~0,18%%BIGNUMBER%%FN:~21%
rem exit "function" rename_to_increased_number
exit /b
:end
答案 1 :(得分:1)
假设3位数字始终在t和v之间,并且名称中没有t和v出现,那么您只需要:
@echo off
setlocal enableDelayedExpansion
for /f "tokens=1,2* delims=tTvV" %%A in (
'dir /b /a-d ?????????????_???t0??v??????????F.dat.gz'
) do (
set /a "num=1%%B+250-1000"
ren "%%At%%Bv%%C" "%%At!num!v%%C"
)
以上也假设基本名称的最后一个字符始终是F.如果不是这样,那么你可以替换另一个吗?对于F,但它可能匹配太短的名称。您可以将结果传递给FINDSTR以使文件掩码更精确。
由于您知道最大输入数字是010,因此我在文件掩码中将第一个数字硬编码为0。这使得在同一文件夹上多次运行脚本是安全的,而不必担心重复向该数字添加250。