windows - 比较批处理脚本中的数字数组

标签 windows batch-file cmd

我正在尝试使用批处理文件比较 9 个数字的序列(由 , 分隔)。 比较总是通过相应的序列进行,例如:

mPrevious[0] <-> mCurrent[0]
mPrevious[1] <-> mCurrent[1]

我需要知道是否至少有一个序列发生了变化。在下面的示例中,234 更改为 230146 更改为 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/

相关文章:

c - 使用异步套接字让服务器处理多个客户端

c++ - Win32 多线程资源

visual-studio-2010 - 错误 MSB3073 : The command "call "C:\project\clientdll\dependencies\gitrev. bat":VCEnd"退出,代码为 255

windows - 尝试在 Windows 中启动 Zookeeper 时出现 "log4j.properties was unexpected at this time"

java - 如何检查批处理文件是否正在 Windows 上运行?

git - 与 Bash 的 `true` 命令等效的 Windows 命令 shell 是什么?

windows - 在 Win7 中使用 .bat 文件休眠。 hibernate 怎么输入y,不 hibernate 怎么输入n?

c++ - 在 opengl 子窗口上渲染一个 qt 覆盖窗口

windows - 有人熟悉未记录的 ObReferenceObjectByName Windows 内核函数吗?

java - Tomcat启动失败: the port X is already in used?如何解决