我想将一个字符串分成两部分,而不使用任何for循环.
例如,我在变量中有字符串:
str=45:abc
Run Code Online (Sandbox Code Playgroud)
我想进入45
变量和abc
另一个变量.是否可以在批处理文件中?
模式就像某些数字:somestring
jeb*_*jeb 17
你可以用不同的方式拆分str.
for循环,你不想使用它.
尾随部分很容易*
(匹配任何东西,直到......)
set "var2=%str:*:=%"
领先的部分可以用一个讨厌的技巧完成
set "var1=%str::="^&REM #%
需要使用插入符号以逃避&符号,
因此有效地将冒号替换为"&REM #
所以在您的情况下,您在替换后获得了该行
set "var1=4567"&REM #abcde
并将其拆分为两个命令
set "var1=4567"
REM #abcde`
Run Code Online (Sandbox Code Playgroud)
完整的代码在这里:
set "str=4567:abcde"
echo %str%
set "var1=%str::="^&REM #%
set "var2=%str:*:=%"
echo var1=%var1% var2=%var2%
Run Code Online (Sandbox Code Playgroud)
编辑2:更稳定的领导部分
感谢Dave使用换行的想法.
对于带引号和特殊字符的内容,REM技术不是很稳定.
但是使用换行技巧存在一个更稳定的版本,当split参数长于单个字符时也可以使用.
@echo off
setlocal enableDelayedExpansion
set ^"str=456789#$#abc"
for /F "delims=" %%a in (^"!str:#$#^=^
!^") do (
set "lead=%%a"
goto :break
)
:break
echo !lead!
Run Code Online (Sandbox Code Playgroud)
解决方案3:Adbeated dbenhams回答
Dbenham在他的解决方案中使用了带管道的换行器.
这似乎有点过于复杂.
由于解决方案使用的事实是,解析器在未转义的换行符之后删除了其余的行(当在特殊字符阶段之前或之后找到它时).
首先,冒号字符被替换为具有延迟扩展替换的换行符.
这是允许的,换行现在是变量的一部分.
然后该线set lead=%lead%
剥离尾部.
最好不要在这里使用扩展语法,因为set "lead=%lead%"
如果引号是字符串的一部分会中断.
setlocal enableDelayedExpansion
set "str=45:abc"
set ^"lead=!str::=^
!"
set lead=%lead%
echo "!lead!"
Run Code Online (Sandbox Code Playgroud)