替换字符串名称中的文本[重复]
Posted
技术标签:
【中文标题】替换字符串名称中的文本[重复]【英文标题】:Replacing Text In The Name Of A String [duplicate] 【发布时间】:2020-10-21 09:07:39 【问题描述】:我设置了很多字符串。有以下名称: 用户 1 用户 2 用户 3 用户4
等等。它们都等于随机文本。 我想将所有这些字符串显示到命令行中。这是我尝试过的一件事:
set /a N=1
:Loop
echo %N% - %%User%N%N%%
set /a N+=1
goto Loop
变量 N 从 1 开始,每次运行 :Loop 都会向上计数。我现在不担心它会永远持续下去,我只是希望它显示每个字符串。这是我尝试过的输出:
1 - %User1N%
2 - %User2N%
当 N = 1 时,它将 %%Users%N%N%% 替换为 %User1N%,这几乎是我想要的。但我希望它也用该字符串等于的内容替换 %User1% 。一些帮助将不胜感激。
【问题讨论】:
试试call echo %%User%N%%%
,看看batch script echo dynamic variable为什么。
执行此操作的标准方法:1- call echo %N% - %%User%N%%%
2- echo %N% - !User%N%!
和更简单的 3- for /L %%N in (1,1,4) do echo %%N - !User%%N!
在this answer 有详细描述。我建议您使用 标准数组表示法,以这种方式将 下标 括在方括号之间:echo %%N - !User[%%N]!
【参考方案1】:
为了将变量扩展两次,您需要延迟它的扩展,这里有几种方法可以实现。
使用Call
有效地将其传递给另一个cmd
实例,(如 cmets 中所述):
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "User1N=Enrico"
Set "User2N=Francis"
Set "User3N=Helena"
Set "User4N=John"
Set "User5N=Roberto"
Set /A N=1
:Loop
Call Echo %N% - %%User%N%N%%
Set /A N+=1
If %N% Lss 6 GoTo Loop
"%__AppDir__%timeout.exe" /T 5 /NoBreak 1>NUL
EndLocal
GoTo :EOF
使用SetLocal
来延迟epansion,(更高效):
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "User1N=Enrico"
Set "User2N=Francis"
Set "User3N=Helena"
Set "User4N=John"
Set "User5N=Roberto"
Set /A N=1
:Loop
SetLocal EnableDelayedExpansion
Echo %N% - !User%N%N!
EndLocal & Set /A N+=1
If %N% Lss 6 GoTo Loop
"%__AppDir__%timeout.exe" /T 5 /NoBreak 1>NUL
EndLocal
GoTo :EOF
【讨论】:
以上是关于替换字符串名称中的文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章