【发布时间】:2018-04-16 04:58:36
【问题描述】:
我想创建一个批处理文件函数来查看服务器,看看我是否需要更新任何程序。我现在设置的方式在
for /l ...
我面临的问题是你需要在循环内部使用 !var!获取更新后的变量值。如果你使用 goto 函数作为 /l 的 sudo 绕过它,它可以工作
以下是无法正常工作的代码行
setlocal enabledelayedexpansion
...
Set LocalL1=Example1.exe
Set /a LocalL1.Byte=1234
...
Set Servr1L=Example2.exe
Set /a LocalL1.Byte=1234
...
FOR /L %%A IN (1,1,%ServrList.Count%) DO (
Set Temp1=!%LocalL%%%A!
Set Temp2=!%ServrL%%%A!
Set Temp1=!!Temp1!.byte!
Set Temp2=!!Temp2!.byte!
)
实际结果
FOR /L %%A IN (1,1,%ServrList.Count%) DO (
Set Temp1=Example1.exe
Set Temp2=Example2.exe
Set Temp1=Example2.exe.byte
Set Temp2=Example2.exe.byte
)
我希望它输出什么
FOR /L %%A IN (1,1,%ServrList.Count%) DO (
Set Temp1=Example1.exe
Set Temp2=Example2.exe
Set Temp1=1234
Set Temp2=1234
)
如果您需要更多代码,请告诉我,但我必须执行“!%LocalL%%%A!”让它工作。在 For /L 之外,它只是不想对每个都进行硬编码
【问题讨论】:
-
也许如果您要透露您对这段代码的期望,我们就能提供解决方案。例子。您提供的代码中没有
set的变量的变量内容。您是否已验证变量的内容是否符合您的预期(除了您遇到问题的明显结果) -
验证变量是否已设置并添加我想要的代码输出
-
如果我理解正确,你有一些我称之为嵌套变量的东西;请参阅this post 以了解如何扩展类似的内容...
-
在您的
FOR /L %%A ...中使用Set Temp1=!LocalL%%A!,后跟FOR %%T IN (!Temp1!) DO Set Temp1=!%%T.byte!。Temp2也是如此(或者您也可以使用 anotherFOR /L循环来改变Temp#中的索引 #)。这种 (array) 管理在上面 aschipfl 链接的答案中进行了解释... -
但是,您的预期结果是错误的。您的代码应该执行
Set /a %LocalL1%.Byte=1234(与Set /a Example1.exe.Byte=1234相同)以显示您的结果。我建议您仔细检查您要实现的目标...
标签: windows batch-file for-loop cmd