我有一个批处理文件,它的参数看起来像这样:7.0.5或10.34.7.2
我想取字符串的最后一个数字,从中减去1,然后重新保存原始字符串,用新数字替换最后一个数字。以下是目前为止的内容:
@echo off
setlocal enabledelayedexpansion
set tag=%1
echo %tag%
for %%a in ("%tag:.=" "%") do set "output=%%~a"
echo last number: %output%
set /a count=0
for /f "tokens=1-3 delims=." %%a in ("%tag%") do (
set /a count+=1
set "numbers[!count!]=%%a"
echo numbers[a]: %%a
)
for /l %%a in (1,1,3) do echo %numbers[%%a]%
set /a lastNum=%output%
echo lastNum: %lastNum%
set /a prevNum=lastNum-1
echo prevNum: %prevNum%
显然这不起作用。第二个for循环将只打印第一个数字,当我到第三个for循环时,它只打印ECHO is off.
,我甚至还没有替换字符串。但是如果我可以填充数组,那么它应该很简单。
把它当作文件名对待,它就变得微不足道了。最后一个令牌将是扩展名,可用%%~xa
,之前的部分将是"文件名",可用%%~na
:
@echo off
setlocal
set tag=%~1
echo input: %tag%
set "last=%~x1" &REM last token ("extension")
set /a last=%last:~1%-1 &REM remove the dot and subtract one
set "prevnum=%~n1.%last%" &REM reassemble "filename"."newExtension"
echo lastNum: %~1 &REM original parameter
echo prevNum: %prevNum% &REM new calcualted value
这行得通:
@echo off
setlocal EnableDelayedExpansion
set "tag=%1"
echo %tag%
set "last=%tag:.=" & set "out=!out!!last!." & set /A "last=%-1" & set "out=!out!!last!"
echo %out%
如果您想了解魔法在哪里,请删除@echo off
行并仔细检查执行的代码…