“delims =#+#” – 多于1个字符作为分隔符

是否可以定义一个不限于1个字符的分隔符? 基于标题的例子,我想定义我的分隔符如“#+#”。 文本文件/行可以包含两个字符,但很less有机会遇到特定的子string/文本组合。

Solutions Collecting From Web of "“delims =#+#” – 多于1个字符作为分隔符"

不,您不能在delims=子句中使用字符串作为分隔符。 当然,你可以包含字符串,但是它将作为一组单独的字符来处理,这些字符将被用作分隔符,而不是作为分隔符字符串。

如果你真的需要分割一个字符串,最快的方法可能是用一个不包含在数据中的字符替换分隔符字符串 ,并使用这个字符作为分隔符

 @echo off setlocal enableextensions disabledelayedexpansion for /f "delims=" %%a in ("this is a +test!! #+# of string #splitting#") do ( set "buffer=%%a" setlocal enabledelayedexpansion (for /f "tokens=1,2 delims=¬" %%b in ("!buffer:#+#=¬!") do ( endlocal echo full line : [%%a] echo first token : [%%b] echo second token : [%%c] )) || if "!!"=="" endlocal ) 

注意setlocal enabledelayedexpansion需要能够读取在for循环中检索数据的变量(这里模拟的直接包含一个字符串)。 然后,在for循环中标记化线,在延迟扩展被禁用,以避免与! 字符(如果延迟扩展处于活动状态,解析器将使用它们)。 这是循环内部的endlocal的原因。

由于我们正在做一个字符串替换,并且可能以一个仅由分隔符组成的字符串结束,因此可能不会执行inner的do子句,因此最终的if被包含以确保enabledelayedexpansion被取消。

我最近发现了一个有趣的技巧,它允许使用多字符字符串作为分隔符以非常简单的方式分割更大的字符串; 该方法不使用任何命令,而是在一行中执行分割 这里是:

 @echo off set "str=this is a +test!! #+# of string #splitting#" set "first=%str:#+#=" & set "last=%" echo full line : [%str%] echo first token : [%first%] echo last token : [%last%] 

这个方法还允许将一个大的字符串拆分成几个部分,并将它们全部存储在一个数组中。 在dos批处理的更多细节迭代通过分隔字符串