2014-02-17 106 views
1

如何增加变量名的一部分?变量名的批量增量部分

EG。我想增加

文件名保存像mmddyyyy-prev01-Database.mdb ,我试图将其重命名为mmddyyyy-prev02-Database.mdb 随着代码

Setlocal EnableDelayedExpansion 
set /a nextFileName=!fileName:~0,13!!fileName:~13!+1 

,我得到 Missing operator.

我使用这个错误制作一个批次子将递归重命名prevXX项目,以便最新的项目总是prev01。我在我的方法中还经常使用setlocal来保持变量不会在更深的调用之间混合起来

+0

我与只是移动他们对自己的一个打算,但谁遇到这种情况,并希望建立自己的解决方案,无论是其他的答案包括大批量的功能,在一个返回newfilename任何未来的人变量 – PsychoData

回答

3

我要去了艰辛的道路:

@ECHO OFF &SETLOCAL disableDelayedExpansion 
FOR /f "delims=" %%x IN ('DIR /b /a-d /o-n *-prev*-Database.mdb') DO (
    FOR /f "tokens=1-3*delims=v-" %%a IN ("%%~x") DO (
     FOR /f "tokens=*delims=0" %%e IN ("0%%c") DO (
      FOR /f %%f IN ('SET /a %%e+1') DO (
       IF %%f LEQ 9 (
        ECHO REN "%%~x" "%%~a-%%~bv0%%~f-%%~d" 
       ) ELSE (
        ECHO REN "%%~x" "%%~a-%%~bv%%~f-%%~d" 
       ) 
      ) 
     ) 
    ) 
) 

只需卸下ECHO小号使其工作。

+0

+1'tokens = * delims = 0'非常好。 –

+1

我正在建立我自己的功能来做到这一点,但这几乎已经做到了。它确实将所有的prevs移到了下面,而不仅仅是当天的那些。我添加了'set currDate =%date:〜4,2 %% date:〜7,2 %% date:〜10,4%',并改变了DIR/b/ad/on * -prev * -Database.mdb到'DIR/b/ad/on%currdate%* - prev * -INX0400.mdb',它效果很好! – PsychoData

2

SET /A不会允许您这样做。

你必须分解成两行,像这样:

SET BaseFileName=!FileName:~0,13! 
SET /A Counter=!FileName:~13!+1 

然后,把碎片重新走到一起:

SET NextFileName=%BaseFileName%%Counter%-Database.mdb 

注意:这将无法处理您的领导0。 ..你必须为此编写更多的代码。

+0

因此,我必须保留基文件名,然后对数字部分进行算术运算并重新组合。有道理 – PsychoData

2
... 
set filename=mmddyyyy-prev01-Database.mdb 
call :nextname 
ren %filename% %newname% 
... 


:nextname 
set /a newname=1%filename:~13,2%+1 
set newname=%filename:~0,13%%newname:~-2%%filename:~15% 
goto :eof 

无论你使用ren %filename% %newname%ren !filename! !newname!是语境的问题。您发布的代码不够确定。如果像我怀疑,你是在一个循环中执行ren,那么你就需要在!var!形式和delayedexpansion(与你熟悉的出现。)在子程序:nextname,该%var%形式应该被使用。

记住,你需要在反向字母顺序重命名现有的文件,所以

mmddyyyy-prev03-Database.mdb becomes mmddyyyy-prev04-Database.mdb 
mmddyyyy-prev02-Database.mdb becomes mmddyyyy-prev03-Database.mdb 
mmddyyyy-prev01-Database.mdb becomes mmddyyyy-prev02-Database.mdb 
+0

聪明的数学诀窍。 :) – aphoria

+0

因此,您将数学结果保存到newname,然后将newname设置为基本文件名和计算字段。简单 – PsychoData