我需要使用一个字符串格式的变量内容作为其他变量的名称并调用该变量内容。
就像是:
set upd1= c:\test1
set testval=upd1
set upd=%testval%
echo %upd%
结果是 upd1,我想得到结果以显示 c:\test1
我需要使用一个字符串格式的变量内容作为其他变量的名称并调用该变量内容。
就像是:
set upd1= c:\test1
set testval=upd1
set upd=%testval%
echo %upd%
结果是 upd1,我想得到结果以显示 c:\test1
你应该改变
set testval=upd1
作为set testval=%upd1%
@echo off
setlocal enabledelayedexpansion
set name=foo
set foo=bar
echo !%name%!
呼应“酒吧”。
尝试这个:
@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
@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。