如何使用CMD批处理以完整单词作为分隔符分割字符串
批处理按完整字符串分割的解决方案
嘿,你遇到的问题我太懂了!for /f命令里的delims参数是按单个字符集合来分割的,不是你以为的完整字符串。所以当你写delims=MYSTR时,它会把M、Y、S、T、R每一个字符都当成独立的分隔符,自然只会在第一个M的位置就分割了,完全达不到按MYSTR整词分割的效果。
要实现按完整单词分割,我们可以用字符串替换+单字符分隔的技巧,步骤如下:
- 先把目标分隔符
MYSTR替换成一个原字符串中不存在的特殊字符(比如|,只要确保原字符串里没这个字符就行) - 再用
for /f以这个特殊字符作为分隔符来分割处理后的字符串
下面是可以直接运行的完整代码:
@echo off setlocal enabledelayedexpansion :: 定义原始字符串和分隔符 set "original_str=sssssMssssMYSTR___M___MYSTRzzzzzzMzzzz" set "split_word=MYSTR" :: 把分隔符替换成特殊字符|(可根据实际情况换其他字符) set "temp_str=!original_str:%split_word%=|!" :: 按|分割字符串,tokens=1,2,3对应三段内容 for /f "tokens=1,2,3 delims=|" %%A in ("!temp_str!") do ( set "part1=%%A" set "part2=%%B" set "part3=%%C" ) :: 输出结果 echo 分割后的三段内容: echo 第一段:*!part1!* echo 第二段:*!part2!* echo 第三段:*!part3!* endlocal
运行这段代码后,你就能得到期望的结果:
分割后的三段内容: 第一段:*sssssMssss* 第二段:*___M___* 第三段:*zzzzzzMzzzz*
补充说明
- 一定要启用
enabledelayedexpansion(延迟扩展),否则在for循环里无法正确读取和修改变量 - 替换用的特殊字符要选原字符串里绝对没有的,避免误分割;如果不确定,可以先检查原字符串是否包含该字符,或者用更冷门的符号比如
£、§
内容的提问来源于stack exchange,提问作者Анна Кен
相关产品推荐
相关产品推荐

