Windows - Batch String Concatenation

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at oprette en batch streng som denne: > abcd \_


Jeg har en variabel kaldet soeid, med værdi som abcd. Så det gør jeg, men det virker ikke.


set soeid=abcd

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

echo \%str\%

Bedste reference


Jeg er sikker på, at det fungerer fint. For at bevise det, tilføj SET STR efter at du har defineret værdien, og du vil se den korrekte værdi.


Det problem, du har, er, når du forsøger at ekko værdien, bliver den linje, der udføres, til: echo >abcd\_. > er ikke citeret eller undslapet, så det tager simpelthen ECHO's udgang uden argumenter og omdirigerer den til en fil med navnet 'abcd\_'


Hvis du ikke har noget imod at se citater, skal du ændre din linje til echo "\%str\%", og den vil fungere.


Den anden mulighed er at aktivere og bruge forsinket ekspansion (jeg 'm forudsat at dette er en batch script kode og ikke udføres på kommandolinjen)


setlocal enableDelayedExpansion
set soeid=abcd

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

echo !str!


Normal \%var\% ekspansion finder sted tidligt, mens tolken analyserer linjen. Forsinket !var! ekspansion sker i slutningen lige før den udføres. Omdirigeringen registreres et sted i midten. Derfor fungerer den normale ekspansion ikke - tolken ser det udvidede > tegn og fortolker det som output omdirigeringsoperatør. Den forsinkede ekspansion skjuler > karakteren fra tolken indtil omdirigering er analyseret .


For mere information om forsinket ekspansion, skriv SET /? fra kommandolinjen og læs begyndende med det afsnit, der begynder med 'Endelig støtte for forsinket ekspansion af miljøvariabler ...'.