如何使用 .bat 文件将值增加 1

如何使用 .bat 文件将值增加 1

我有一个rev.bat文件。文件内容是:

设置 v1=10 设置 v2=20 设置 v3=1p5 设置 v4=50 设置 v5=%v4%

我想将 v3 的值增加 1(即 1p6)。

下面的代码将值更新为 1,但这种情况不是。

@echo off
cd /d D:\
setlocal enabledelayedexpansion
::set /p "var=Buildnum "
set "file=rev.bat"
for /F "tokens=1,* delims==" %%i in ('findstr "v3= " rev.bat') do (
    set "versionVar=%%~i"
    set "versionVal=%%~j"
    set /a sequence=%%~j+1
)

for /f "tokens=1,*delims=]" %%i in ('type "%file%" ^| find /v /n "" ^& break^>%file%') do (
    set "line=%%j"
    if "!line!" == "!versionVar!=!versionVal!" set line=!versionVar!=!sequence!
    echo(!line!>>!file!
 )
 

答案1

只要您有一个特定的变量,这基本上就可以做到。

PowerShell 可以在这方面做得更好。

如果希望 v5=%v4% 起作用,则需要做更多工作。使用双百分号 (v5=%%v4%%) 进行批处理检测 % 符号并传递只会起作用一次。您将在输出文件中得到 v5=%v4%,我无法检测到它,因为批处理会删除它们,我不知道如何纠正。

  1. 我在 = 上分割线并将它们命名为 LHS 和 RHS(左侧等)。
  2. 我在 LHS 上寻找 v3 作为 ID
  3. 如果不是 v3=xyz,则跳至步骤 #6
  4. 我删除前两个字符并保存它们。
  5. 我将其余所有数字视为数字,将其加 1。然后像这样将它们重新组合起来Set RHS=%tmp1%%tmp2%
  6. 我把它们重新组合起来,就像这样Set OutputString=%LHS%=%RHS%
  7. 我将变量写入临时文件。
  8. (当前为 echo 命令)我将 TEMP 文件写入原始文件。
  9. 您可能应该删除临时文件。我没这么做。

可以做得更好,但需要付出的努力会比它值得的更多。

    @echo off
    Set InputFile=%~DP0\rev.bat
    Set OuputFile=%~DP0\rev.tmp.bat

    :: Clear our output file
    del /f "%OuputFile%"

    for /f "delims=" %%l in ('type %InputFile%') do call :CheckLine "%%l" "%OuputFile%"

    :: Using an echo here because you need to make sure the code works for you
    :: before you use it.  It will clobber the original file with the new one.
    echo copy /y "%OuputFile%" "%InputFile%"
    goto :EOF

::  ----------------------------------------------------------
::  Function CheckLine ---------------------------------------
::  ----------------------------------------------------------

:CheckLine 
    Set InputLine=%~1
    Set OuputFile=%~2

    echo Checking value for %InputLine%
    for /f "tokens=1,2 delims== " %%a in ('echo %InputLine%') do set LHS=%%a&&set RHS=%%b

    if /i not "v3" == "%LHS%" goto :NoMod

     Set tmp1=%RHS:~0,2%
     Set tmp2=%RHS:~2%
     Set /a tmp2=%tmp2% +1
     Set RHS=%tmp1%%tmp2%

    :NoMod
    
    Set OutputString=%LHS%=%RHS%
    echo %OutputString% >>%OuputFile%
    goto :EOF

答案2

看看这是否可行,您必须将该批次拖放至另一个批次。

@echo off

setlocal enabledelayedexpansion
set File=C:\my batch\batch.bat
if not exist "%File%" exit

type "%File%" |find /i "v3=" || exit
cls
if exist "%File%.tmp" del /q "%File%.tmp"

for /f "delims=" %%a in ('type "%File%"') do (
                                           echo %%a |find /i "v3=" 2>nul 1>nul 
                                           if not !errorlevel! EQU 0 (>>"%File%.tmp" echo %%a) else (
                                                                                                   set Line=%%a
                                                                                                   set Number=!Line:~5!
                                                                                                   set /a Number+=1
                                                                                                   set "Line=!Line:~0,5!!Number!"
                                                                                                   >>"%File%.tmp" echo !Line!
                                                                                                  )
                                          )
del /q "%File%"
move "%File%.tmp" "%File%"

在此处输入图片描述

相关内容