I had a problem with set
not working in a batch file; it took a while to distil the problem; at first I thought it was to do with subroutine calls...
The script
@echo off
setlocal
set a=aaa
echo a = "%a%"
(
set b=bbb
echo b = "%b%"
)
produces the output
a = "aaa"
b = ""
whereas I'd expect
a = "aaa"
b = "bbb"
Why is this please? Is it a bug in DOS? Perhaps there's something about the (...)
command grouping syntax that I'm unaware of.
Thanks.
User delayed expansion and ! instead of %
@echo off
setlocal enableextensions enabledelayedexpansion
set a=aaa
echo a = "%a%"
(
set b=bbb
echo b = "!b!"
)
What's happening is that the batch interpreter as treating everything in between the brackets a single line. This means it's doing variable replacement on everything betweeen the brackets before any of the commands are run.
So:
(
set b=bbb
echo b = "%b%"
)
Becomes:
(
set b=bbb
echo b = ""
)
The variable b is being set but obviously isn't set before you run the SET
command.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With