Batch - How to Echo %%Variable%%

2019-09-06 01:38发布

I have a small problem with a batch file I'm working on.

Here's a simple sample:

I would like to get the string "THERE" as my result. But the result I get is just "HELLO"

set hello=there
set a=h
set b=ello 
set result=%a%%b%
echo %result%

I already tried something like this:

Echo %%result%%

And Sadly, it just gets me the result %HELLO% Any help would be great. Thanks!

1条回答
beautiful°
2楼-- · 2019-09-06 02:00

The reason that %%result%% gives you %result% on the output is that the %% tokens are interpreted first, and further interpretation is not done.

However, you can use that to your advantage, doing a second level of indirection with the following trick:

@echo off
set result=hello
echo %result%
call :iset second %%result%%
echo %second%
goto :eof

:iset
    for /F "usebackq tokens=*" %%i in (`echo %%%2%%`) do set %1=%%i
    goto :eof

The secret lies in passing the thing you want interpreted (in this case, %%result%% passes in the literal %result% as per the rules stated in the first paragraph, not the interpretation of it).

The for loop then echos the interpretation of that (hello) surrounded by %...% (again, the double %% reduces to %), so that it is also interpreted, and it uses that to set the target variable you also passed in.

The upshot is that it effectively gives you:

%(%result%)%

which is what you're after.


Might I suggest, however, that you start looking into Powershell, so that you don't have to perform these batch-gymnastics in future :-)

查看更多
登录 后发表回答