@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "string=1,2,3,5,4,2"
CALL :process
SET "string=1,2,3,5,4,2,1,1,1,1,1,1,1,1,107,221,3,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,13,2,1"
CALL :process
SET "string="
CALL :process
SET "string=3"
CALL :process
SET "string=3,3"
CALL :process
GOTO :eof
:process
SET "newstring=,"
IF DEFINED string FOR %%a IN (%string%) DO (SET "newstring=!newstring:,%%a,=,!%%a,")
SET "newstring=%newstring:~1,-1%"
ECHO oldstring:%string%:
ECHO newstring:%newstring%:
GOTO :EOF
的另一种方式,利用内置示范
编辑---解释。
将newstring
设置为单个逗号。这确保了newstring
都以逗号开头和结尾。
for
遍历字符串中的每个元素;逗号被视为分隔符。
对于找到的每个元素n
,用,
代替任何,n,
,然后将n,
加到最后。
结果:独特元素列表,由,
包围 - 因此删除第一个和最后一个字符并完成。
注意delayedexpansion
和使用!
利于这种方法,但
IF DEFINED string FOR %%a IN (%string%) DO CALL SET "newstring=%%newstring:,%%a,=,%%%%a,"
可以不管delayedexpansion
状态下使用。
引用是针对终端空间抑制,遵循标准惯例。
哦 - 非常好,意外的解决方案。 – dbenham 2014-10-30 00:07:15
完美。非常优雅。感谢Magoo!我只是试图计算Set newstring部分如何在if语句的末尾工作... – stigzler 2014-10-30 07:38:52
此解决方案修改输入元素的原始顺序。另外,'IF DEFINED string'部分不是必需的,因为带有空集的'FOR'不会执行任何操作... – Aacini 2014-10-30 18:22:37