如何将拆分值存储在变量中以从批处理脚本中的另一个变量中减去

How to store the split value in variable to subtract from another variable in batch script

我在一个文件夹中有几个 zip 文件,其名称中有一个带下划线的数字,例如 C:\codedeploy\uat-prod\xxxx_123.zip。我想遍历所有文件并将文件名中的数字放入一个变量(fileNumber)中,以便从另一个变量(buildNumber)中减去它(这是我从文本文件加载的整数值)。 第一次拆分后,我能够得到 123.zip(in %%a),因此,为了从中获取数字,我再次拆分它(将其放入 %%i)。然后我尝试将这些值分配给变量 fileNumber、buildNumber 和结果。我检查了这些变量是否通过将它们写入 test.txt 文件并以逗号分隔来获取赋值。但所有变量值都是空的。正确计算这些值后,如果文件满足此条件,我想删除该文件 if %result% GEQ %limit%.

set /p Build=<release_version.txt
Setlocal EnableDelayedExpansion
set /A result=0
for %%f in (C:\codedeploy\uat-prod\*.zip) do (
echo "fullname: %%f ">>"C:\codedeploy\uat-prod\test.txt"
    for /f "tokens=2 delims=_" %%a in ("%%f") do (
        set limit=7
        echo "FileNum: %%a">>"C:\codedeploy\uat-prod\test.txt"
        for /f "tokens=1,2 delims=." %%i in ("%%a") do (
            echo "Num: %%i">>"C:\codedeploy\uat-prod\test.txt"
            set /A fileNumber=%%i
            set /A buildNumber=%Build%
            set /a result=buildNumber-fileNumber
            echo "fileNumber: %fileNumber%, buildNumber: %buildNumber%, finla: %result%">>"C:\codedeploy\uat-prod\test.txt"
            REM set /a result=%Build%-%%i
            REM echo "value is=%result%"
            REM if %result% GEQ %limit% (Del %%f)
            REM if %result% GEQ %limit% (Del "%%f")
            rem if %Build%-%%i GEQ %limit% (Del /S /Q "%%f")
        )
    )
)

为了实现这一点,我一直在绞尽脑汁。因此,我们将不胜感激。 提前致谢。

我可能不太明白你想要达到的目的,但这看起来应该是一样的,但效率更高,(并且显然使用适当的 !延迟变量).

Set /P "Build=" 0< "release_version.txt"
Set "limit=7"
Set "result=0"
(
    For %%G In ("C:\codedeploy\uat-prod\*_*.zip") Do (
        Echo "fullname: %%G"
        For /F "EOL=: Tokens=2 Delims=_" %%H In ("%%~nG") Do (
            Echo "FileNum: %%H%%xG"
            Echo "Num: %%H"
            SetLocal EnableDelayedExpansion
            Set /A result=Build - %%H
            Echo "fileNumber: %%H, buildNumber: %Build%, final: !result!"
            Rem If !result! GEq %limit% Del /A /F "%%G"
            EndLocal
        )
    )
) 1> "C:\codedeploy\uat-prod\test.txt"