如何在Windows批处理文件中连接字符串for循环?

Mar*_*ton 35 windows batch-file

我熟悉Unix shell脚本,但是对Windows脚本新手很熟悉.

我有一个包含str1,str2,str3 ... str10的字符串列表.我想这样做:

for string in string_list
do
  var = string+"xyz"
  svn co var
end
Run Code Online (Sandbox Code Playgroud)

我找到了一些描述如何在批处理文件中连接字符串的线程.但它在某种程度上不适用于循环.所以我仍然对批处理语法感到困惑.

End*_*oro 40

试试这个,用字符串:

set "var=string1string2string3"
Run Code Online (Sandbox Code Playgroud)

和字符串变量:

set "var=%string1%%string2%%string3%"
Run Code Online (Sandbox Code Playgroud)

  • 提示:注意var和=之间没有空格 (17认同)
  • 将字符串与字符串变量混合起来怎么样? (2认同)

Ans*_*ers 37

在批处理中你可以这样做:

@echo off

setlocal EnableDelayedExpansion

set "string_list=str1 str2 str3 ... str10"

for %%s in (%string_list%) do (
  set "var=%%sxyz"
  svn co "!var!"
)
Run Code Online (Sandbox Code Playgroud)

如果您不需要!var!循环中其他位置的变量,则可以将其简化为

@echo off

setlocal

set "string_list=str1 str2 str3 ... str10"

for %%s in (%string_list%) do svn co "%%sxyz"
Run Code Online (Sandbox Code Playgroud)

但是,像CB一样,如果可能的话,我更喜欢PowerShell:

$string_list = 'str1', 'str2', 'str3', ... 'str10'

$string_list | ForEach-Object {
  $var = "${_}xyz"   # alternatively: $var = $_ + 'xyz'
  svn co $var
}
Run Code Online (Sandbox Code Playgroud)

同样,如果你不需要$var循环中的其他地方,这可以简化:

$string_list = 'str1', 'str2', 'str3', ... 'str10'
$string_list | ForEach-Object { svn co "${_}xyz" }
Run Code Online (Sandbox Code Playgroud)


Ili*_* S. 9

一个非常简单的例子:

SET a=Hello
SET b=World
SET c=%a% %b%!
echo %c%
Run Code Online (Sandbox Code Playgroud)

结果应该是:

Hello World!
Run Code Online (Sandbox Code Playgroud)

  • 如果您添加或多或少重复的答案,它至少应该有效(它不会,输出是“!”) (2认同)
  • 问题是关于在循环中连接字符串。您的答案不适用于循环内?因此,答案与原问题无关。 (2认同)