2

Yeah, batch scripting. I know. Sorry.

The final goal is to produce a file containing XML elements. Up to now, these items have been created by hand, but there's got to be a better way. My first idea is to do a batch script. What I've been doing up until now is copy/ paste, manually adding +1 to the id, page, and src="page_#" items. It's fine when the xml file contains only 40 entries. Not so fine when we're going past 100 or more.

GOAL: Need to increment the elements, say, navPoint id=#, Page #, and content src=page_# in the below:

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

I've got a working batch script that can loop and update ONE variable, and it is thusly:

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

This last part, >>C:\Users\me.txt, sends it to a txt file.

HOWEVER, I want the Page number to start at 2, not 1. My batch script works great, %%x starts at 1 and increments uniformly. I need another variable in the loop that is one greater than %%x.

so the result would be:

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

and the next result would be:

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

etc...

How can this be accomplished in batch scripting? I thought it would be as simple as %%x+1 but it's not...

1 Answer 1

3
  1. You can do arithmetic with set /a. Do help set from the command line to read about it.

  2. If you set a variable inside a block (e.g., if, for), you need to enable delayed variable expansion with setlocal EnableDelayedExpansion. Then you use ! instead of % to expand the variable. If you are outside of the code block, you can go back to using %. help set also will tell you about delayed expansion.

Using these 2 pieces of information, you can change your code to this to get what you want:

@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
Sign up to request clarification or add additional context in comments.

1 Comment

that worked just as needed. And I can add/modify variables in the same fashion that you showed me here. Thanks very much! -Don

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.