替换字符串名称中的文本[重复]

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

【讨论】:

以上是关于替换字符串名称中的文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从sed中的文本文件中查找并替换多个字符串[重复]

SQL更新和替换子字符串[重复]

SQL更新和替换子字符串[重复]

替换python字符串中的特殊字母[重复]

intellij idea有没有像eclipse的全局替换文本,因为我替换所有类中的某一个名称的代码

如何用数据框中的字符串值替换 int 值[重复]