我有一个由#
字符分隔的许多部分组成的字符串
某些部分可能包含空格和逗号
我试过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个部分(以#
字符分隔)。
答案 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为空时脚本结束。如果您需要原始字符串,请先将其复制到另一个变量。