如何在批处理文件中的for循环中使用可变长度的子字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在批处理文件中的for循环中使用可变长度的子字符串?相关的知识,希望对你有一定的参考价值。

我试图在批处理文件中进行一些字符串比较和提取。该操作在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. 即使我在网上广泛搜索,我也没有找到一个解决方案来做可变长度的子字符串。批处理文件substring函数:〜似乎只取固定的整数值。

有没有人知道如何在上面的代码中的注释部分实现这些功能?

答案

动态子串很容易延迟扩展。

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!

它也可以用于搜索和替换

另一答案

你的路线

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

以上是关于如何在批处理文件中的for循环中使用可变长度的子字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 for 循环将列表中的子值相互比较?

如何在批处理文件中使用for循环列出文件夹中所有文件和目录的名称

在Windows批处理中的循环中使用变量替换另一个变量中的子字符串

如何打破批处理文件中的 FOR 循环?

退出批处理文件中的 FOR 循环?

我将如何隔离或仅将第二个元素存储在批处理文件内的 for 循环中?