批处理循环遍历由哈希字符串分隔,其中包含空格和逗号
Batch loop through a delimited by hash string, which contain spaces and commas
我有一个由 #
个字符分隔的许多部分组成的字符串。
某些部分可能包含空格和逗号。
我尝试了 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 多个部分(由 #
个字符分隔)。
如果字符串包含通配符,下面的方法将失败:*
或 ?
。
@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
)
以下方法没有任何限制:
@echo off
setlocal DisableDelayedExpansion
set string_to_separate=11AAA#222 BB,333 CC,444DDD#555ee,77ff f#88g gg
set "str="
setlocal EnableDelayedExpansion
set ^"str=!string_to_separate:#=^
% New line %
!^"
for /F "eol=# delims=" %%i in ("!str!") do (
if defined str endlocal
echo %%i
)
只要内容中没有 !
,下面的内容就会起作用。它通过为每个 #
.
替换一个新行来工作
@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
)
这里有另一个版本供您试用。第一个 for 循环确定在 myEcho 函数中提取哪个字符串。一旦字符串的部分数量用完,myEcho 函数将不会回显。所以 200 只是一个任意数字,以确保报告所有部分。
@echo off
set string_to_separate=one#two#three#four#five#six#seven#eight#nine#ten#eleven#twelve#thirteen#fourteen#fifteen#sixteen#seventeen#eighteen#nineteen#twenty#twenty one#twenty two#twenty three#twenty four#twenty five#twenty six#twenty seven#twenty eight#twenty nine#thirty#thirty one#thirty two#thirty three#thirty four#thirty five#thirty six#thirty seven#thirty eight#thirty nine#forty#forty one#forty two#forty three#forty four#forty five#forty six#forty seven#forty eight#forty nine#fifty#fifty one#fifty two#fifty three#fifty four#fifty five#fifty six#fifty seven#fifty eight#fifty nine#sixty#sixty one#sixty two#sixty three#sixty four#sixty five#sixty six#sixty seven#sixty eight#sixty nine#seventy#seventy one#seventy two#seventy three#seventy four#seventy five#
:loop
if not defined string_to_separate goto :EOF
FOR /F "tokens=1,* delims=#" %%i IN ("%string_to_separate%") Do (
echo.%%i
set string_to_separate=%%j
)
goto loop
注意:string_to_separate现在正在不断缩短,当string_to_separate为空时脚本结束。如果您需要原始字符串,只需先将其复制到另一个变量即可。
我有一个由 #
个字符分隔的许多部分组成的字符串。
某些部分可能包含空格和逗号。
我尝试了 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 多个部分(由 #
个字符分隔)。
如果字符串包含通配符,下面的方法将失败:*
或 ?
。
@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
)
以下方法没有任何限制:
@echo off
setlocal DisableDelayedExpansion
set string_to_separate=11AAA#222 BB,333 CC,444DDD#555ee,77ff f#88g gg
set "str="
setlocal EnableDelayedExpansion
set ^"str=!string_to_separate:#=^
% New line %
!^"
for /F "eol=# delims=" %%i in ("!str!") do (
if defined str endlocal
echo %%i
)
只要内容中没有 !
,下面的内容就会起作用。它通过为每个 #
.
@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
)
这里有另一个版本供您试用。第一个 for 循环确定在 myEcho 函数中提取哪个字符串。一旦字符串的部分数量用完,myEcho 函数将不会回显。所以 200 只是一个任意数字,以确保报告所有部分。
@echo off
set string_to_separate=one#two#three#four#five#six#seven#eight#nine#ten#eleven#twelve#thirteen#fourteen#fifteen#sixteen#seventeen#eighteen#nineteen#twenty#twenty one#twenty two#twenty three#twenty four#twenty five#twenty six#twenty seven#twenty eight#twenty nine#thirty#thirty one#thirty two#thirty three#thirty four#thirty five#thirty six#thirty seven#thirty eight#thirty nine#forty#forty one#forty two#forty three#forty four#forty five#forty six#forty seven#forty eight#forty nine#fifty#fifty one#fifty two#fifty three#fifty four#fifty five#fifty six#fifty seven#fifty eight#fifty nine#sixty#sixty one#sixty two#sixty three#sixty four#sixty five#sixty six#sixty seven#sixty eight#sixty nine#seventy#seventy one#seventy two#seventy three#seventy four#seventy five#
:loop
if not defined string_to_separate goto :EOF
FOR /F "tokens=1,* delims=#" %%i IN ("%string_to_separate%") Do (
echo.%%i
set string_to_separate=%%j
)
goto loop
注意:string_to_separate现在正在不断缩短,当string_to_separate为空时脚本结束。如果您需要原始字符串,只需先将其复制到另一个变量即可。