变量名称的批量增量部分

时间:2014-02-17 17:39:31

标签: variables batch-file

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

EG。我想增加

filename包含mmddyyyy-prev01-Database.mdb之类的内容 我正在尝试将其重命名为mmddyyyy-prev02-Database.mdb 使用代码

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

我收到错误 Missing operator.

我正在使用它创建一个批处理子,它将递归重命名prevXX项,以便最新的项始终为prev01。我也在我的方法中定期setlocal来防止变量在更深层的调用之间混淆

3 个答案:

答案 0 :(得分: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即可使其正常运行。

答案 1 :(得分:2)

SET /A不允许你这样做。

你必须分成两行,如下所示:

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

然后,将这些碎片放回原处:

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

注意:这不会处理您的潜在客户0 ...您必须为此编写更多代码。

答案 2 :(得分: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