1)快速示例:
set a="Hello"
set d="a"
现在,如何使用变量d
的值来获取“a”的值?例如,变量名可能是由用户使用提示输入的,或者变量的名称可能已发送给函数。
这些想法都不起作用:
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
谢谢!
答案 0 :(得分:9)
没有delayed expansion
的示例(保留感叹号):
@echo off &setlocal
set "a=Hello!"
set "d=a"
call echo %%%d%%%
输出:
Hello!
答案 1 :(得分:6)
如果我理解正确,那么称为“延迟扩展”的技巧应该有效:
SETLOCAL ENABLEDELAYEDEXPANSION
SET a=Hello
SET b=a
ECHO This is the value of a: !%b%!
SETLOCAL DISABLEDELAYEDEXPANSION
检查其工作原理here
答案 2 :(得分:3)
第2部分
set file="C:\Users\Blah\Documents\MP4Box\MP4Box.exe"
for %%a in (%file%) do echo %%~dpa
答案 3 :(得分:0)
它很简单: 当你输入例如。
SET VarName=VarValue
然后SET函数被赋予一个类似" VarName = VarValue"的字符串。 - 无论您是否使用标记都无关紧要,以下命令也是如此:
SET VarName=VarValue
SET "VarName=VarValue"
现在反思一下,我们有什么工具来构建一个字符串,我们想出了这个想法:
SET "Name=VarName"
SET "%VarName%=VarValue"
Echo %Varname%
迟到总比没有好 - 过得愉快