Windows批处理使用变量内容作为另一个变量名称

时间:2013-09-02 13:47:46

标签: batch-file

我需要使用一个字符串格式的变量内容,作为其他变量的名称并调用该变量内容。

类似的东西:

set upd1= c:\test1
set testval=upd1

set upd=%testval%

echo %upd%

结果是upd1,我想得到结果显示c:\ test1

4 个答案:

答案 0 :(得分:2)

你应该改变

set testval=upd1

set testval=%upd1%

答案 1 :(得分:1)

试试这个:

@ECHO OFF &SETLOCAL
set "upd1= c:\test1"
set "testval=upd1"
set "upd=testval"
ECHO %upd%
CALL ECHO %%%upd%%%
CALL CALL ECHO %%%%%%%upd%%%%%%%

输出:

testval
upd1
 c:\test1

答案 2 :(得分:1)

@echo off
setlocal enabledelayedexpansion

set name=foo
set foo=bar
echo !%name%!

回应“酒吧”。

答案 3 :(得分:0)

@ECHO OFF
SETLOCAL
set upd1= c:\test1
set testval=upd1
::
:: First way - if value may not begin "="
::
FOR /f "tokens=1*delims==" %%i IN ('set %testval%') DO IF /i "%%i"=="%testval%" SET upd2=%%j


ECHO(first way+%upd2%+
ENDLOCAL
SETLOCAL
set upd1=x====== c:\test1
set testval=upd1
::
:: Second way - value may begin "="
::
FOR /f "delims=" %%i IN ('set %testval%') DO ECHO %%i|FINDSTR /i /b /l /c:"%testval%=" >nul&IF NOT ERRORLEVEL 1 SET upd2=%%i
CALL SET upd2=%%upd2:*%testval%=%%
SET upd2=%upd2:~1%

ECHO(second way+%upd2%+
SET upd
GOTO :EOF

根据您的情况,这有两种方式。注意我已将名称upd更改为upd2,以便使用最终的set命令进行简单比较。另外,upd1的原始值包含空格;因此我添加了一个+来直观地界定值echo ed。