Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Batch String Concatenation

I am trying to create a batch string like this: >abcd_

I have a variable called soeid, with value as abcd. So this is what i am doing, but it does not work.

set soeid=abcd

set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"

echo %str%
like image 931
NewQueries Avatar asked Feb 22 '12 20:02

NewQueries


1 Answers

I'm sure it is working just fine. To prove it, add SET STR after you define the value, and you will see the correct value.

The problem you are having is when you try to echo the value, the line that is executing becomes: echo >abcd_. The > is not quoted or escaped, so it is simply taking the ouput of ECHO with no arguments and redirecting it to a file named "abcd_"

If you don't mind seeing quotes, then change your line to echo "%str%" and it will work.

The other option is to enable and use delayed expansion (I'm assuming this is a batch script code, and not executing on the command line)

setlocal enableDelayedExpansion
set soeid=abcd

set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"

echo !str!

Normal %var% expansion occurs early on while the interpreter is parsing the line. Delayed !var! expansion occurs at the end just before it is executed. The redirection is detected somewhere in the middle. That is why the normal expansion doesn't work - the interpreter sees the expanded > character and interprets it as the output redirection operator. The delayed expansion hides the > character from the interpreter until after redirection is parsed.

For more info about delayed expansion, type SET /? from the command line and read starting with the paragraph that starts with "Finally, support for delayed environment variable expansion...".

like image 145
dbenham Avatar answered Oct 14 '22 13:10

dbenham