加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 20:08:13 所属栏目:Windows 来源:网络整理
导读:我想分割一个字符串两部分,而不使用任何for循环. 例如,我有一个变量中的字符串: str=45:abc 我想在另一个变量中得到一个变量和abc的45.是否可能在批处理文件? 模式就像somenumber:somestring 你可以用不同的方式拆分str. for循环,你不想使用它. 尾随部分
我想分割一个字符串两部分,而不使用任何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!"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读