我正在尝试使用批处理文件比较 9 个数字的序列(由 ,
分隔)。
比较总是通过相应的序列进行,例如:
mPrevious[0] <-> mCurrent[0]
mPrevious[1] <-> mCurrent[1]
我需要知道是否至少有一个序列发生了变化。在下面的示例中,234
更改为 230
,146
更改为 149
。
到目前为止我的草图是:
setlocal ENABLEDELAYEDEXPANSION
@echo off
set mPrevious=229,234,235,127,58,0,131,133,146
set mCurrent=229,230,235,127,58,0,131,133,149
for /f "tokens=1,2,3,4,5,6,7,8,9 delims=," %%a IN ('echo !mPrevious!') do (
)
条目数量(当前为 9)将来可能会发生变化。但现在他们只有 9 岁。
我不确定在批处理脚本中执行此操作的正确方法是什么。
最佳答案
@echo off
title <nul && title ...\%~nx0
setlocal enabledelayedexpansion
set "_mPrevious=229,234,235,127,58,0,131,133,146"
set "_mCurrents=229,230,235,127,58,0,131,133,149"
echo/!_mPrevious!|find "!_mCurrents!" >nul && (
endlocal & echo\Nothing changed^!! & goto :EOF )
for %%i in (!_mPrevious!)do set /a "_i+=1+0" && call set "_mPrev_!_i!=%%~i"
for %%j in (!_mCurrents!)do set /a "_j+=1+0" && call set "_mCurr_!_j!=%%~j"
if !_i! neq !_j! endlocal & echo\Varyables have different lengths^!! & goto :EOF
for /L %%L in (1 1 !_j!)do if !_mPrev_%%~L! neq !_mCurr_%%~L! echo\!_mPrev_%%~L! updated to: !_mCurr_%%~L!
endlocal && goto :EOF
- 输出:
234 updated to: 230
146 updated to: 149
仅在必要时且仅当两个变量具有相同长度时才执行此操作的一种简单方法:
如果变量相同,则进行第一次比较,值发生变化:
echo/!_mPrevious!|find "!_mCurrents!" >nul && (
endlocal & echo\Nothing changed^!! & goto :EOF )
如果它们继续具有相同的长度,则再一秒钟:
if !_i! neq !_j! endlocal & echo\Variables have different lengths^!! & goto :EOF
观察: 1. 我更喜欢替换 [ ]
到一个简单的 _
观察: 2. 另外,更改 i+=
至 _i+=1+0
,无需预定义 set
命令:<强>set i=0
关于windows - 比较批处理脚本中的数字数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61979934/