# Batch files question, namely assigning values correctly

This topic is 1655 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hi all.

I have a batch file where I run files listed in a text file through an audio codec. The text file is set out as follows:

BGM_Name	    file	flag	LoopStart	 Length
title		    7001	0x01	1810432	         5921928;
map                 7552	0x01	0073664	         4997136;


There are many more listings in the real file. The parts Im interested in are the loopstart and the length properties, as the audio format Im dealing with encodes loop starts and lengths internally and these are the sample counts from the start of the file.

The codec is run at the command line as follows with command line arguments:

codec loopstart loopend input output


so loopend is obviously the LoopStart plus the Length.

The batch file I use to process all the files is as follows

for /f "tokens=1-5" %%l in (test.txt) do (
set /a endloop1=%%p
set /a endloop2=%%q
set /a endloop = endloop1 + endloop2
codec -loop %endloop1% %endloop% *input and output file names omitted for the example*
)


%%p is the value of loopStart and %%q is the length, and even though a fair few files are processed correctly and even though Ive checked via using @echo that the values of p and q change each time the values arent always set to endloop1 and endloop2 so the values from the previous iteration are used and thusly the audio file is encoded incorrectly and during gameplay goes into jarring loops.

Can anyone explain why endloop1 and endloop2 sometimes dont get assigned the correct val even if p and q are set correctly?

##### Share on other sites

Shouldn't you be using o and p instead of p and q? The tokens would be stored in l, m, n, o, and p.

##### Share on other sites

Sorry ,that was just a typo as Ive simplified the example. However, during running as I said, I had the read values of o and p echoed to the screen and they looked fine, but they werent being assigned to the variables correctly...if I used the values of o and p directly their ascii value would be used and not the integer value so that solution is a no-go.

##### Share on other sites

Make sure you don't have extra spaces in this line:

set /a endloop = endloop1 + endloop2

It should be:

set /a endloop=endloop1+endloop2

Also, numeric values starting with a leading '0' will be treated as octal, so it's possible that some of your lines contain values with leading '0's and digits greater than 7, which would result in an error. I noticed your "map" line has a LoopStart value with leading '0's...

Other than that, I don't see anything wrong with your script.

##### Share on other sites

Thanks Dave, Ill try out your suggestion!

##### Share on other sites

Well, Im still having errors. Ive changed the script and the txt file, Im using a compact test file. The batch file is now as follows:

@echo off
@echo -------CONVERSION---------
for /f "tokens=1-5" %%l in (test.txt) do (
@echo %%n.wav?%%ni.fco??????
@echo %%o %%p
set /a endloop1=%%o
set /a endloop2=%%p
set /a endloop=endloop1+endloop2
@echo %endloop1% %endloop2% %endloop%
contool -e -br 144 -loop %endloop1% %endloop% ed%%n.wav ed%%n.fco


And test.txt in its entirety is

bgmtbl BGM_Title    7552 73664   4997136	

bgmtbl BGM_GameOver 7534 22464   4014400
bgmtbl BGM_Midtown  7101 773184  3718720
bgmtbl BGM_Cross_1  7102 112838  5827154


for some reason the endloop values use the numbers from the last line of the text file over and over! e.g

7552.wav?7552i.fco??????
73664 4997136
112838 5827154 5939992
your parametter doesn't satisfy under the condition
0<= loopstart(112838) <= loopend(5939992) < Total Sample(5118208) element=0/1

7534.wav?7534i.fco??????
22464 4014400
112838 5827154 5939992
your parametter doesn't satisfy under the condition
0<= loopstart(112838) <= loopend(5939992) < Total Sample(4125696) element=0/1

etc


Its driving me crazy!