Подтвердить что ты не робот

Как конкатенировать строки в пакетном файле windows для цикла?

Я знаком с сценариями оболочки Unix, но новыми для сценариев Windows.

У меня есть список строк, содержащих str1, str2, str3... str10. Я хочу сделать вот так:

for string in string_list
do
  var = string+"xyz"
  svn co var
end

Я нашел некоторый поток, описывающий, как конкатенировать строку в пакетном файле. Но это как-то не работает для цикла. Поэтому я все еще запутался в пакетном синтаксисе.

4b9b3361

Ответ 1

В пакетном режиме вы можете сделать это следующим образом:

@echo off

setlocal EnableDelayedExpansion

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

for %%s in (%string_list%) do (
  set "var=%%sxyz"
  svn co "!var!"
)

Если вам не нужна переменная !var! в другом месте цикла, вы можете упростить ее до

@echo off

setlocal

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

for %%s in (%string_list%) do svn co "%%sxyz"

Однако, как и C.B., я бы предпочел PowerShell, если это вообще возможно:

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

$string_list | ForEach-Object {
  $var = "${_}xyz"   # alternatively: $var = $_ + 'xyz'
  svn co $var
}

Опять же, это можно упростить, если вам не нужен $var в другом месте цикла:

$string_list = 'str1', 'str2', 'str3', ... 'str10'
$string_list | ForEach-Object { svn co "${_}xyz" }

Ответ 2

Попробуйте это, со строками:

set "var=string1string2string3"

и со строковыми переменными:

set "var=%string1%%string2%%string3%"