gpt4 book ai didi

batch-file - 如何在批处理文件中不使用for循环分割字符串

转载 作者:行者123 更新时间:2023-12-02 23:53:32 25 4
gpt4 key购买 nike

我想将字符串分成两部分,而不使用任何 for 循环。

例如,我在变量中有字符串:

str=45:abc

我想在一个变量中获取 45 并在另一个变量中获取 abc 。可以在批处理文件中吗?

模式就像 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:更稳定的领先部分

感谢戴夫提出使用换行的想法。
REM 技术对于带有引号和特殊字符的内容不太稳定。
但是,通过换行技巧,存在一个更稳定的版本,当分割参数长于单个字符时,该版本也可以工作。

@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 之前或中找到该换行时)。

首先,冒号字符被替换为具有延迟扩展替换的换行符。
这是允许的,换行符现在是变量的一部分。
然后,set Lead=%lead% 行将删除尾随部分。
最好不要在这里使用扩展语法,因为如果引号是字符串的一部分,set "lead=%lead%" 就会中断。

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

!"
set lead=%lead%
echo "!lead!"

关于batch-file - 如何在批处理文件中不使用for循环分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14620709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com