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

我想分割一个字符串两部分,而不使用任何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!"

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...