gpt4 book ai didi

string - 用符号将变量分成不同的部分

转载 作者:行者123 更新时间:2023-12-02 11:53:38 26 4
gpt4 key购买 nike

使用批处理,我希望能够将一个变量分成两个或三个部分,当有一个符号将它们分开时。例如,如果我有如下所示的字符串:var1;var2;

如何让 var1 成为变量,让 var2 成为不同的变量。

提前致谢

最佳答案

将变量拆分为数组(或 Windows 批处理可以模仿的尽可能接近数组)的最佳方法是将变量的值转换为 for 循环可以理解的格式。不带任何开关的 for 将逐字拆分行,以 csv 类型分隔符(逗号、空格、制表符或分号)进行拆分。

这比 for/f 更合适,后者逐行循环而不是逐字循环,并且它允许拆分未知数量元素的字符串。

这基本上是使用 for 循环进行拆分的工作原理。

setlocal enabledelayedexpansion
set idx=0
for %%I in ("%var:;=","%") do (
set "var[!idx!]=%%~I"
set /a "idx+=1"
)

重要的部分是将 ; 替换为 %var% 中的 ",",并将整个内容用引号引起来。确实,这就是most graceful method例如,分割 %PATH% 环境变量。

这是一个更完整的演示,调用子例程来拆分变量。

@echo off
setlocal enabledelayedexpansion

set string=one;two;three;four;five;

:: Uncomment this line to split %PATH%
:: set string=%PATH%

call :split "%string%" ";" array

:: Loop through the resulting array
for /L %%I in (0, 1, %array.ubound%) do (
echo array[%%I] = !array[%%I]!
)

:: end main script
goto :EOF


:: split subroutine
:split <string_to_split> <split_delimiter> <array_to_populate>
:: populates <array_to_populate>
:: creates arrayname.length (number of elements in array)
:: creates arrayname.ubound (upper index of array)

set "_data=%~1"

:: replace delimiter with " " and enclose in quotes
set _data="!_data:%~2=" "!"

:: remove empty "" (comment this out if you need to keep empty elements)
set "_data=%_data:""=%"

:: initialize array.length=0, array.ubound=-1
set /a "%~3.length=0, %~3.ubound=-1"

for %%I in (%_data%) do (
set "%~3[!%~3.length!]=%%~I"
set /a "%~3.length+=1, %~3.ubound+=1"
)
goto :EOF

这是上述脚本的输出:

C:\Users\me\Desktop>test.bat
array[0] = one
array[1] = two
array[2] = three
array[3] = four
array[4] = five

只是为了好玩,尝试取消注释 set string=%PATH% 行,让美好时光滚滚而来。

关于string - 用符号将变量分成不同的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15535424/

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