如何将字符串附加到单词列表中的每个单词并将新单词列表分配给变量?

问题描述 投票:0回答:1

这似乎是一个微不足道的问题,但我无法为此提出一个优雅的解决方案。

我有一个分配给环境变量的单词列表

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
的新单词列表?

windows batch-file
1个回答
1
投票

命令提示符窗口中运行时的命令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

都被上面的代码解释为延迟扩展环境变量引用的开始/结束,导致错误的处理,可以通过在第四行中使用

!
看到,或者使用
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 命令行处理为以下内容: %%

命令 
CALL

会导致在执行命令 SET 之前再处理一次

  for %I in (test batch) do call set "C=%C% %Iing"
,其中 set "C=%C% %Iing" 会被环境变量
%C%
的当前值替换。
另请参阅:

    Windows 命令解释器(CMD.EXE)如何解析脚本?
  • 变量的行为不符合预期
© www.soinside.com 2019 - 2024. All rights reserved.