У меня есть пакетный файл. Здесь я присвоил некоторые значения переменной. Я хочу удалить повторяющиеся значения из переменной.
@echo off
set test=1,2,4,1,5,6,2,3
Ожидаемый результат: 1,2,3,4,5,6
У меня есть пакетный файл. Здесь я присвоил некоторые значения переменной. Я хочу удалить повторяющиеся значения из переменной.
@echo off
set test=1,2,4,1,5,6,2,3
Ожидаемый результат: 1,2,3,4,5,6
Если выходные данные должны быть отсортированы, то вы можете использовать этот пакетный скрипт, который я описал ниже с небольшим исследованием и тестированием. Я также предоставил дополнительные учебные ресурсы ниже.
@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
Я только что ответил на аналогичный вопрос, как удалить дубликаты-запятые-значения-переменные-используя-пакетный файл в 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
Это решение не будет сортировать данные за вас, но удалит дубликаты:
@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