Как сделать подстроку с переменной длиной в цикле for внутри командных файлов? - PullRequest
7 голосов
/ 18 января 2012

Я пытаюсь выполнить сравнение и извлечение строк в командном файле. Операция выполняется для набора имен папок из репозитория SVN.

for /f %%f in ('svn list https://dev_server/svn/product/branches') do ( 
    set folder=%%f 

    echo Folder: %folder%

    :: get substring from %folder% starting at 0 with a length of %length%
    :: if this substring is equal to %folderStart% then get substring from %folder% starting at position %length%   
)

Здесь есть несколько проблем:

  1. По какой-то причине значение %% f не назначено% folder%.
  2. Несмотря на то, что я много искал в Интернете, я не нашел решения для создания подстроки с переменной длиной. Функция подстроки пакетного файла: ~, кажется, принимает только фиксированные целочисленные значения.

Кто-нибудь имеет представление о том, как я мог бы реализовать функции в разделе комментариев в коде выше?

Ответы [ 2 ]

6 голосов
/ 19 января 2012

Динамическая подстрока проста с отложенным расширением.

setlocal enableDelayedExpansion
set "string=1234567890"

::using a normal variable
set len=5
echo !string:~0,%len%!

::using a FOR variable
for /l %%n in (1 1 10) do echo !string:~0,%%n!

Она также может работать с поиском и заменой

0 голосов
/ 18 января 2012

Ваша линия

echo %folder% 

должно быть

echo !folder! 

Надеюсь, что ниже показано, как сделать подстроку

@echo off
    setlocal ENABLEDELAYEDEXPANSION

    set theString=abcd

    for %%f in (1 2 3 4) do ( 

        set pos=%%f

        call :Resolve theString:~0,!pos!

        echo !retval!

    )

goto :eof

:Resolve

  for  %%a in ("^!%*^!") do set retval=%%~a

goto :eof

, что дает

a
ab
abc
abcd
...