批处理:重命名文件,将特定数字与字符串相加

时间:2014-10-15 07:37:15

标签: batch-file rename

我需要创建一个批处理文件,将目录中所有文件的总和+250重命名为位于字符串特定位置的特定数字。

我试着用例子来解释一下。

输入文件

  • 1410141603209_f06t的 003 v0003600000F.dat.gz
  • 1410141603508_f06t的 005 v0003600000F.dat.gz
  • 1410141603508_f06t的 006 v0003600000F.dat.gz
  • 1410141603508_f06t的 010 v0003600000F.dat.gz

输出文件

  • 1410141603209_f06t的 253 v0003600000F.dat.gz
  • 1410141603508_f06t的 255 v0003600000F.dat.gz
  • 1410141603508_f06t的 256 v0003600000F.dat.gz
  • 1410141603508_f06t的 260 v0003600000F.dat.gz

正如您所看到的,我需要更改的字符串中唯一的部分是粗体部分,总计+250。 只是另一个信息......输入文件可以达到的最高数字是010,因此输出文件可以达到的最高数字是260.

提前感谢大家的帮助!!!

2 个答案:

答案 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。