@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
완벽합니다. 환상적으로 우아합니다. 감사 Magoo! 그냥 if 문 끝에서 Set newstring 파트가 어떻게 작동하는지 파악하려고합니다 ... – stigzler
이 솔루션은 입력 요소의 원래 순서를 수정합니다. 또한 빈 집합을 가진'FOR'은 아무 것도 실행하지 않기 때문에'IF DEFINED string' 부분은 필요 없습니다 ... – Aacini