批处理文件 – 如何在批处理文件中拆分不带循环的字符串

前端之家收集整理的这篇文章主要介绍了批处理文件 – 如何在批处理文件中拆分不带循环的字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想分割一个字符串两部分,而不使用任何for循环.

例如,我有一个变量中的字符串:

str=45:abc

我想在另一个变量中得到一个变量和abc的45.是否可能在批处理文件

模式就像somenumber:somestring

你可以用不同的方式拆分str.

for循环,你不想使用它.

尾随部分很容易与*(匹配任何东西直到…)
设置“var2 =%str:*:=%”

领先的部分可以用一个讨厌的技巧来完成
设置“var1 =%str :: =”^& REM#%

需要插入符号来避开&符号,
所以有效的结肠将被“& REM#
所以在你的情况下,你得到了替换后的行
设置“var1 = 4567”& REM #abcde
这被分为两个命令

set "var1=4567"
REM #abcde`

完整的代码在这里:

set "str=4567:abcde"
echo %str%
set "var1=%str::="^&REM #%
set "var2=%str:*:=%"
echo var1=%var1% var2=%var2%

编辑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!

解决方案3:补充dbenhams答案

Dbenham在他的解决方案中使用带有管道的换行.
这似乎有点复杂.
解决方案使用这个事实,解析器在非转义换行符之后(当在special character phase之前或之后找到它)时删除该行的其余部分.

首先,将冒号替换为延期扩展替换的换行符.
这是允许的,换行符现在是变量的一部分.
然后线设置lead =%lead%剥离尾部.
最好不要在这里使用扩展语法,如果引号是字符串的一部分,那么“lead =%lead%”将会中断.

setlocal enableDelayedExpansion
set "str=45:abc"
set ^"lead=!str::=^

!"
set lead=%lead%
echo "!lead!"
原文链接:https://www.f2er.com/windows/371034.html

猜你在找的Windows相关文章