windows - 如何将字符串附加到单词列表中的每个单词并将新单词列表分配给变量?
问题描述
这似乎是一个微不足道的问题,但我无法为此提出一个优雅的解决方案。
我有一个分配给环境变量的单词列表A
。我有另一个变量b
,它的字符串值应该与单词列表中的每个单词连接,A
以获得分配给环境变量的新单词列表C
。
这是我到目前为止的代码:
@echo off
set A=test batch
set b=ing
for %%a in (%A%) do (
set C=%%a%b%
)
echo %C%
Pause
命令行echo %C%
应该输出testing batching
,但用这段代码输出只是batching
。
如何将变量的字符串值附加到变量b
单词列表中的每个单词A
以获得分配给变量的新单词列表C
?
解决方案
在命令提示符窗口中运行的命令SET输出的帮助解释了IF和FOR示例,类似于有问题的代码何时以及如何使用延迟的环境变量扩展。set /?
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "A=test batch"
set "b=ing"
set "C="
for %%I in (%A%) do set "C=!C! %%I%b%"
rem Remove the space character at beginning.
set "C=%C:~1%"
echo %C%
endlocal
pause
上面的代码将所有!
in 字符串解释为延迟扩展环境变量引用的开始/结束,从而导致错误处理,这可以通过set "b=ing!"
在第四行中使用或更糟set "A=!test! batch"
地在第三行中使用来看到。
还有另一种解决方案可以避免使用延迟的环境变量扩展,因此也适用于包含一个或多个感叹号的字符串。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "A=test batch"
set "b=ing"
set "C="
for %%I in (%A%) do call set "C=%%C%% %%I%b%"
rem Remove the space character at beginning.
set "C=%C:~1%"
echo %C%
endlocal
pause
两边C
都引用了环境变量,导致在执行命令FOR之前,Windows 命令处理器将FOR命令行处理为以下内容:%%
for %I in (test batch) do call set "C=%C% %Iing"
命令CALLset "C=%C% %Iing"
导致在执行命令SET之前再进行一次处理,将其%C%
替换为环境变量的当前值C
。
也可以看看:
推荐阅读
- python-3.x - 为什么不能将类属性作为参数直接分配给类括号,而不是使用 def __init__ 方法?
- graphql - 如何通过 Graphiql Playground 进行身份验证
- anylogic - shapeBody.setFillColor 不起作用(来自 Anylogic in 3 days book)
- git - 无法通过“gogs docker image”从 /var/lib/docker 获知。树莓派上 Docker 的存储库路径在哪里?
- docker - 使用绑定挂载从主机运行 drush cc
- php - 从 WooCommerce 订单中获取使用过的优惠券代码和相关折扣金额
- asp.net-core-mvc - 如何在 .NET Core 5 MVC 中使用使用 RouteOptions?(强制小写 URL 等)
- python - 将日期时间字符串解析为日期时间对象而不设置格式
- sql - Visual Studio mvc 一键更新多个数据
- c++ - 演示一个打印字符串组合的类