【问题标题】:Batch string into array and substring of each element issue将字符串批量转换为每个元素问题的数组和子字符串
【发布时间】:2014-05-28 13:39:41
【问题描述】:

我有以下字符串:

AAA:BBB, CCC:DDD, EEE:FFF

我需要将 BBB、DDD 和 FFF 提取到单独的变量中,因为我需要为每个变量运行一次另一个脚本,并将变量作为参数。在这个例子中,我需要运行:

script.cmd BBB
script.cmd DDD
script.cmd FFF

字符串可以只是“AAA:BBB”,也可以有 10 种格式,最多为“YYY:ZZZ”。 我的思路是用字符串做一个数组。首先,我将删除初始字符串中的所有最终空格,然后用逗号分隔元素。所以结果是:

Array[0]=AAA:BBB
Array[1]=CCC:DDD
.......
Array[n]=YYY:ZZZ

之后,我可以取出每个元素并尝试删除“*:”,并留下:

Array[0]=BBB
Array[1]=DDD
.......
Array[n]=ZZZ

然后我可以使用这些作为参数。我做了以下事情:

rem -- set string
set STRING=AAA:BBB, CCC:DDD, EEE:FFF

rem -- trim eventual spaces in STRING
set STRING=%STRING: =%

rem -- replaces comas with spaces to be able to create array
set STRING=%STRING:,= %

setlocal ENABLEDELAYEDEXPANSION

rem -- split string into array
set index=0
for %%A in (%STRING%) do (
  set Array[!index!] = %%A
  set /a index += 1
  )

拆分效果很好。但这就是我卡住的地方。在过去的几个小时里,我尝试获取数组的每个元素并删除冒号之前的所有字符,包括冒号。不知道我做错了什么,输出很奇怪。我尝试使用用于拆分字符串的相同 for 来运行带有参数的脚本。拆分完成后,我尝试使用另一个 for 。没有任何效果。

好像是命令:

set string=%string:*:=%

.. 出于某种原因对数组的每个元素都不起作用。输出很奇怪,类似于 "stringn=%=%" 。我不明白为什么。相同的命令适用于不是数组元素的其他变量。

有人有什么建议吗?非常感谢。

【问题讨论】:

    标签: arrays string batch-file substring


    【解决方案1】:

    这是另一种方法:

    @echo off
    set "string=AAA:BBB, CCC:DDD, EEE:FFF"
    for %%a in (%string::=\%) do echo script.cmd %%~nxa
    

    【讨论】:

    • 像处理文件一样处理它的好主意。
    • 谢谢。效果很好。介意解释一下,以便我能理解吗?你用 \ 替换所有冒号,%%~nxa 做什么?
    • %%~nxapath\filename 字符串返回a 元变量的文件名和扩展名。将: 更改为\ 时,它看起来像path\filename,因此它返回每个术语中最后一个\ 字符之后的部分。空格和其他一些字符会破坏这种方法,但是您没有在您的条款中指明使用的字符集,因此我们必须按照您提供的条款进行。 for 命令在此用法中使用逗号。
    【解决方案2】:
    set "string=AAA:BBB, CCC:DDD, EEE:FFF"
    for %%i in (%string%) do for /f "tokens=2 delims=:" %%j in ('echo %%i') do echo script.cmd %%j
    

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 2016-05-26
      • 1970-01-01
      • 2019-02-21
      • 2014-04-05
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多