将带有符号的变量分成不同的部分

时间:2013-03-20 21:48:52

标签: string batch-file

使用批处理,我希望能够将变量分成两个或三个部分,当有一个符号除以它们。例如,如果我有这样的字符串: VAR1; VAR2;

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

先谢谢

3 个答案:

答案 0 :(得分:11)

将变量拆分为数组(或者像Windows批处理可以模仿的那样接近数组)的最佳方法是将变量的值放入for循环可以理解的格式中。没有任何开关的for将逐字拆分,在csv-type分隔符(逗号,空格,制表符或分号)处拆分。

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

这里基本上是如何使用setlocal enabledelayedexpansion set idx=0 for %%I in ("%var:;=","%") do ( set "var[!idx!]=%%~I" set /a "idx+=1" ) 循环进行分割。

;

重要的一部分是将","替换为%var%中的%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 环境变量的most graceful method

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

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

以下是上述脚本的输出:

set string=%PATH%

只是为了好玩,尝试取消评论{{1}}行并让好时光滚动。

答案 1 :(得分:8)

Tokens=1,2会创建两个for循环变量%%i%%j&amp;将string拆分为两部分,由分隔符;分隔:

@echo off &setlocal
set "string=var1;var2;"
for /f "tokens=1,2 delims=;" %%i in ("%string%") do set "variable1=%%i" &set "variable2=%%j"
echo variable1: %variable1%
echo variable2: %variable2%
endlocal
pause

对于更“动态”的方法,请使用:

@echo off &setlocal enabledelayedexpansion
set "string=var1;var2;"

set /a count=0
for %%i in (%string%) do (
    set /a count+=1
    set "variable!count!=%%i"
)
echo found %count% variables
for /l %%i in (1,1,%count%) do (
    echo variable%%i: !variable%%i!
)
endlocal

答案 2 :(得分:0)

如果仅出现“一个”,请更改该行

for /L %%I in (0, 1, %array.ubound%) do (

作者

for /L %%I in (0, 1, !array.ubound!) do (