Having read an existing post on stackoverflow and done some reading around on the net. I thought it was time to post my question before I lost too much hair!
I have the following code within a batch file which I double click to run, under Windows XP SP3:
SETLOCAL ENABLEDELAYEDEXPANSION ::Observe variable is not defined SET test ::Define initial value SET test = 'Two' ::Observe initial value is set SET test ::Verify if the contents of the variable matches our condition If '!test!' == 'Two' GOTO TWO ::First Place holder :ONE ::Echo first response ECHO 'One' ::Second Place holder :TWO ::Echo second response ECHO 'Two' ::Await user input PAUSE ENDLOCAL
Basically I am trying to establish if I can navigate through my script using conditionals. It seems apparent that I am getting some issues with variable scope and delayed variable expansion yet I’m a little lost on what I’m doing wrong.
Can anyone point me in the right direction?
Your immediate problem is that you’re setting the variable to the value < ‘Two’> which you can see here:
which produces:
The reason your ‘set test’ is outputting the variable is the same reason why ‘set t’ would – if there’s no variable of the specific name, it outputs all variables starting with that name.
The set command is also a finicky little beast and does not like spaces surrounding the ‘=’ characters; it incorporates them (and the quotes by the way) into the environment variable name and the value assigned to it. Instead, use:
Also, where you’re using delayed expansion, it doesn’t matter since %test% and !test! would expand the same. It’s useful in statements like:
The inner echo will output TwoAndABit whereas %test%, which is expanded when the whole if-statement is encountered, would cause it to output Two.
Still, I always use delayed expansion everywhere just for consistency.