批处理循环由哈希字符串分隔,其中包含空格和逗号

时间:2015-05-06 20:56:02

标签: loops batch-file for-loop command-line scripting

我有一个由#字符分隔的许多部分组成的字符串 某些部分可能包含空格和逗号 我试过FOR循环,但这不起作用。

@echo off

set string_to_separate=11AAA#222 BB,333 CC,444DDD#555ee,77ff f#88g gg

for /f "tokens=* delims=#" %%i in (%string_to_separate%) do (
    echo %%i
)

我需要结果:

11AAA
222 BB,333 CC,444DDD
555ee,77ff f
88g gg

我需要使用批处理(.bat)文件,这样的循环选项有哪些?

P.S。 string_to_separate可能有超过100个部分(以#字符分隔)。

3 个答案:

答案 0 :(得分:2)

如果字符串包含通配符字符,则以下方法会失败:(math.log(n,2)).is_integer() *

?

以下方法没有任何限制:

@echo off

set string_to_separate=11AAA#222 BB,333 CC,444DDD#555ee,77ff f#88g gg

for %%i in ("%string_to_separate:#=" "%") do (
   echo %%~i
)

答案 1 :(得分:2)

只要内容中没有!,以下内容就会有效。它的工作原理是为每个#替换一个新行。

@echo off
setlocal enableDelayedExpansion
set "string_to_separate=11AAA#'222 BB',333 CC,444DDD#555ee,77ff f#88g gg"
for /f usebackq^ delims^=^ eol^= %%A in ('!string_to_separate:#^=^

!') do echo %%A

该方法可以使用更多代码支持内容中的!

@echo off
setlocal disableDelayedExpansion
set "string_to_separate=11AAA!#'222 BB',333 CC,444DDD#555ee,77ff f#88g gg"
setlocal enableDelayedExpansion
for /f usebackq^ delims^=^ eol^= %%A in ('!string_to_separate:#^=^

!') do (
  if "!!" equ "" endlocal
  echo %%A
)

答案 2 :(得分:1)

这是您尝试的另一个版本。第一个for循环确定在myEcho函数中提取哪个字符串。一旦字符串的部分数量耗尽,myEcho函数将不会回显。所以200只是一个任意数字,以确保报告所有部分。

values

注意:string_to_separate现在不断缩短,当string_to_separate为空时脚本结束。如果您需要原始字符串,请先将其复制到另一个变量。