使用批处理文件从变量中删除重复项

使用批处理文件从变量中删除重复项

我有一个批处理文件。在这里我给一个变量分配了一些值。我想从变量中删除重复的值。

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

预期输出:1,2,3,4,5,6

答案1

如果必须对输出进行排序,那么您可以使用下面这个批处理脚本,这是我经过一些研究和测试后编写的。我还在下面提供了进一步的学习资源。

脚本

@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

更多资源

答案2

我刚刚回答了一个类似的问题如何使用批处理文件从变量中删除重复的逗号分隔值在 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

答案3

此解决方案不会对数据进行排序,但会删除重复项:

@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

相关内容