批处理脚本中的for循环增加两个或多个变量

时间:2013-01-17 21:31:20

标签: loops batch-file

是的,批处理脚本。我知道。遗憾。

最终目标是生成包含XML元素的文件。到目前为止,这些物品都是手工制作的,但必须有更好的方法。我的第一个想法是做一个批处理脚本。到目前为止我一直在做的是复制/粘贴,手动为id,page和src =“page_#”项添加+1。当xml文件只包含40个条目时,它很好。当我们超过100或更多时,不太好。

目标:需要增加元素,例如 navPoint id =#页面内容src = page _#下面:

<navPoint id="1"><text>Page 1</text><content src="page_1.html"></navPoint>

我有一个可以循环和更新ONE变量的工作批处理脚本,因此它是:

echo
for /l %%x in (1, 1, 8) do (
echo ^<navPoint id="navPoint-%%x"^>^<navLabel^>^<text^>Page %%x^</text^>^</navlabel^>^<content src="page_%%x.html"/^>^</navPoint^>)>>C:\Users\me.txt

最后一部分&gt;&gt; C:\ Users \ me.txt将其发送到txt文件。

但是,我希望页码从2开始,而不是1.我的批处理脚本工作得很好,%% x从1开始并统一递增。我需要循环中另一个大于%% x的变量。

所以结果将是:

<navPoint id="1"><text>Page 2</text><content src="page_1.html"></navPoint>

,下一个结果将是:

<navPoint id="2"><text>Page 3</text><content src="page_2.html"></navPoint>

等...

如何在批处理脚本中完成此操作?我认为它会像 %% x + 1 一样简单,但它不是......

1 个答案:

答案 0 :(得分:3)

  1. 您可以使用set /a进行算术运算。从命令行执行help set以阅读它。

  2. 如果在块中设置变量(例如 if for ),则需要使用setlocal EnableDelayedExpansion启用延迟变量扩展。然后,您使用!代替%来扩展变量。如果您不在代码块之内,则可以返回使用%help set也会告诉您延迟扩张的情况。

  3. 使用这两条信息,您可以将代码更改为此以获得您想要的信息:

    @echo off
    setlocal EnableDelayedExpansion
    for /l %%x in (1, 1, 8) do (
        set /a PAGENUM=%%x+1
        echo ^<navPoint id="navPoint-%%x"^>^<navLabel^>^<text^>Page !PAGENUM!^</text^>^</navlabel^>^<content src="page_%%x.html"/^>^</navPoint^>
    )>>C:\Users\me.txt