windows 批处理脚本打印设置命令,不是所需的设置列表值[重复]

5uzkadbs  于 2022-12-14  发布在  Windows
关注(0)|答案(1)|浏览(138)

此问题在此处已有答案

Variables are not behaving as expected(1个答案)
Nested Variables in Substring selection(1个答案)
4天前关闭。
下面的代码用于打印基于2个集合的命令行

@echo off

rem Define lists of register addresses and values to write
set MY_REG_ADDRESSES=3 22 28 29 31 32 21 51 94 97 104 105 77
set MY_REG_VALUES=4 12000 450 40 100 40 1440 100 450 10000 0 0 1000

rem Write values to Modbus registers using the lists
set i=0
for %%a in (%MY_REG_ADDRESSES%) do (
    set /a i=i+1
    echo modpoll -r %%a -t 4 -4 1  COM3 !MY_REG_VALUES:~%i%,1!
)

我希望代码输出如下所示的行:

modpoll -r 3 -t 4 -4 1  COM3 4

而是我得到:

modpoll -r 3 -t 4 -4 1  COM3 !MY_REG_VALUES:~0,1!

我也尝试过使用list[i],但没有返回任何结果?

j2datikz

j2datikz1#

也许这就是你想做的!

  • 这可能不是最有效的方法,但只要你的清单不是很长,它就应该非常适合你。*
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Rem Define lists of register addresses and values to write
Set "MY_REG_ADDRESSES=3 22 28 29 31 32 21 51 94 97 104 105 77"
Set "MY_REG_VALUES=4 12000 450 40 100 40 1440 100 450 10000 0 0 1000"

Rem Write values to Modbus registers using the lists
Set "Acount=0"
For %%G In (%MY_REG_ADDRESSES%) Do (
    Set /A Acount += 1, Vcount=0
    For %%H In (%MY_REG_VALUES%) Do (
        Set /A Vcount += 1
        If !Acount! Equ !Vcount! Echo modpoll -r %%G -t 4 -4 1  COM3 %%H
    )
)

Pause

显然,最后一行是可选的,(我只是将其包括在内,以便您可以在双击脚本时看到结果)

相关问题