在我的主批处理文件中,我要求用户输入(仅限于某些字符串)并将其存储为变量,然后我需要将一个字符串附加到该变量以创建另一个变量的名称并返回该变量的值存储在另一个文件中。
为了简单起见,我尝试做的果味示例:
在我的配置文件中我会有这样的内容:
set banana_colour=yellow
set orange_colour=orange
set strawberry_colour=red
etc...
然后在我的主文件中我会有
set /p fruit="Please input a fruit: "
然后我希望能够通过将用户输入与字符串连接起来返回配置文件中变量的值(在本例中为
_colour
)。因此,如果用户输入 banana,我将回显名称为 banana_colour
的变量值,在本例中为 yellow
。
我尝试设置一个新变量,它是输入和字符串的串联,然后回显该字符串的变量。例如:
set colour=%fruit%_colour
echo %colour%
但是,当然,这不会返回具有该名称的变量的值,它只是返回名称:
banana_colour
而不是yellow
。
for /f "usebackqtokens=1-3delims== " %%g in ("fullfilename") do if /i "%%g"=="set" if /i "%%h"=="%fruit%_colour" set "fruitcolour=%%i"
请参阅提示或 SO 上无尽示例中的
for /?
以获取文档。
解释一下,
读取文件的每一行
fullfilename
- 如果文件名包含诸如空格之类的分隔符,则必须加引号。如果文件名不包含分隔符,则可以省略引号 和 usebackq
选项。
使用 = 或 Space 作为分隔符对读取的每一行进行标记,以便返回 3 个标记(由
1-3
指定)并分别分配给 %%g
、%%h
和 %%i
,因此行 set banana_colour=yellow
将返回 %%g
=set
、%%h
=banana_colour
和 %%i
=yellow
。
使用
tokens=1,2,*
将返回所描述的第一个和第二个标记,第三个标记将是第二个分隔符序列后面的行的其余部分(一系列分隔符解释为单个分隔符,前导分隔符将被忽略)。如果最后指定了 delims=
选项,则 delims
和结束引号之间的每个字符都是分隔符。
if /i
使比较不区分大小写
如果您愿意,"%fruit%_colour"
可以是 "%colour%"
。
结果返回到变量中
fruitcolour
metavariables
%%g
、%%h
和 %%i
仅在 for
语句的上下文中;在 for
语句执行完成后,它们将不再可用。