@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