1

У меня есть пакетный файл. Здесь я присвоил некоторые значения переменной. Я хочу удалить повторяющиеся значения из переменной.

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

Ожидаемый результат: 1,2,3,4,5,6

3 ответа3

3

Если выходные данные должны быть отсортированы, то вы можете использовать этот пакетный скрипт, который я описал ниже с небольшим исследованием и тестированием. Я также предоставил дополнительные учебные ресурсы ниже.

скрипт

@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"
    )

Результат на выходе

1,2,3,4,5,6

Дополнительные ресурсы

1

Я только что ответил на аналогичный вопрос, как удалить дубликаты-запятые-значения-переменные-используя-пакетный файл в StackOverflow.

Изменен мой ответ для работы с номерами длиной до 10 мест:

:: Q:\Test\2018\09\20\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%

Образец вывода:

> Q:\Test\2018\09\20\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
1

Это решение не будет сортировать данные за вас, но удалит дубликаты:

@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!

Пример вывода:

Old String: 1,2,4,1,5,6,2,3
New String: 1,2,4,5,6,3

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .