11

1)快速示例:

set a="Hello"
set d="a"

现在,如何使用变量(的值)获取“a”的值d?例如,变量名称可能是由用户使用提示输入的,或者变量名称可能已发送到函数。

这些想法都不起作用:

set e=%%d%%

set e=%%%d%%%

set e=set e=%%d%%
%e%

经过一个小时的头脑风暴和谷歌搜索,我想出了这个,但它似乎太复杂和笨拙 - 真的没有其他/更简单的方法吗?:

set a="Hello"
set b="Good day"
set c="Good night"

set /p d="Give me a variable name"

call :GetVarVal %%%d%%% "e"

REM This now gives the correct value:
echo %e%

goto :eof

:GetVarVal
  set "%~2=%~1"
goto :eof

2)另外,有点类似,有没有更好的方法来做到这一点(理想情况下没有自定义功能):

set a="C:\Users\Blah\Documents\MP4Box\MP4Box.exe"

call :get_drive_and_path a

echo %b%

goto :eof

:get_drive_and_path
  set b=%~dp1
goto :eof

谢谢!

4

4 回答 4

15

没有的示例delayed expansion(保留感叹号):

@echo off &setlocal
set "a=Hello!"
set "d=a"
call echo %%%d%%%

输出:

Hello!
于 2013-10-02T22:35:06.890 回答
7

如果我对您的理解正确,则称为“延迟扩展”的技巧应该起作用:

SETLOCAL ENABLEDELAYEDEXPANSION
SET a=Hello
SET b=a
ECHO This is the value of a: !%b%!
SETLOCAL DISABLEDELAYEDEXPANSION

在这里检查它是如何工作的

于 2013-10-02T21:45:31.280 回答
3

第2部分

set file="C:\Users\Blah\Documents\MP4Box\MP4Box.exe"
for %%a in (%file%) do echo %%~dpa
于 2013-10-03T10:13:47.507 回答
0

它很简单:当你输入例如

SET VarName=VarValue

然后 SET 函数得到一个看起来像“VarName=VarValue”的字符串——无论你是否使用标记都没有关系,以下命令也是如此:

SET VarName=VarValue
SET "VarName=VarValue"

所以现在回想一下,我们有什么工具来构建一个字符串,我们想出了使用这个的想法:

SET "Name=VarName"
SET "%VarName%=VarValue"
Echo %Varname%

迟到总比没有好 - 玩得开心

于 2015-12-17T11:02:37.300 回答