Remove duplicados da variável usando o arquivo de lote

1

Eu tenho um arquivo em lotes. Aqui eu atribuí alguns valores a uma variável. Eu quero remover valores duplicados da variável.

@echo off
set test=1,2,4,1,5,6,2,3

Saída esperada: 1,2,3,4,5,6

    
por deepak singla 20.09.2018 / 04:02

3 respostas

3

Se a saída deve ser classificada, então você pode usar este script em lote abaixo que eu agitei com um pouco de pesquisa e teste. Eu forneci mais recursos de estudo abaixo também.

Script

@echo off
set "test=1,2,4,1,5,6,2,3"
for %%a in (%test%) do echo %%a>>"test1.txt"
sort "test1.txt">>"sort1.txt"
for /f %%b in (sort1.txt) do findstr "%%~b" "new1.txt" >nul 2>&1 || echo %%b>>"new1.txt"

set var=
for /f "tokens=*" %%c in (new1.txt) do (
    call set var=%%var%%,%%c
)
SET var=%var:~1%
echo %var%

for %%z in (test1.txt,sort1.txt,new1.txt) do (
    if exist "%%z" del /q /f "%%z"
    )

Resultado da saída

1,2,3,4,5,6

Mais recursos

por 20.09.2018 / 07:09
1

Esta solução não irá ordenar os dados para você, mas removerá as duplicatas:

@ECHO off
SETLOCAL EnableDelayedExpansion
SET oldstring=1,2,4,1,5,6,2,3
SET newstring=

FOR %%a IN ("%oldstring:,=";"%") DO (
    IF NOT !test%%~a!==TRUE (
        SET test%%~a=TRUE
        IF "!newstring!"=="" (
            SET newstring=%%~a
        ) ELSE (
            SET newstring=!newstring!,%%~a
        )
    )
)

ECHO Old String: !oldstring!
ECHO New String: !newstring!

Exemplo de saída:

Old String: 1,2,4,1,5,6,2,3
New String: 1,2,4,5,6,3
    
por 20.09.2018 / 06:35
1

Acabei de responder a uma pergunta semelhante como-remover-duplicar-valores separados por vírgula-de-variável-usando-lote -file no StackOverflow.

Modifiquei minha resposta para trabalhar com números de até 10 lugares:

:: Q:\Test18\SU_1359742.cmd
@Echo off & Setlocal EnableDelayedExpansion
set test=1,2,4,1,12,5,11,6,2,3
:: clear array test[], then fill it
For /f "tokens=1 delims==" %%M in ('Set test[ 2^>Nul') do Set "%%M="
For %%M in (%test%) do (
   Set "M=          %%M"
   Set "test[!M:~-10!]=%%M"
)
Set test[
Echo:    
Set "test="
For /f "tokens=2 delims==" %%M in ('Set test[') do Set "test=!test!,%%M"

Echo:%test:~1%

Exemplo de saída:

> Q:\Test18\SU_1359742.cmd
test[         1]=1
test[         2]=2
test[         3]=3
test[         4]=4
test[         5]=5
test[         6]=6
test[        11]=11
test[        12]=12

1,2,3,4,5,6,11,12
    
por 20.09.2018 / 14:33