Как удалить дубликаты значений, разделенных запятыми, из переменной, используя командный файл? - PullRequest
0 голосов
/ 20 сентября 2018

Хотите удалить повторяющиеся значения из машин Переменная в файле ниже:

@echo off
set machines=node1,node2,node3,node2,node4,node1,node7,node6,node4

Ожидаемый результат:

node1,node2,node3,node4,node6,node7

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Короткий способ сделать это (это не сортирует переменную machines , только удаляет дубликаты):

@echo off& setlocal EnableDelayedExpansion
set machines=node1,node2,node3,node2,node4,node1,node7,node6,node4

set "tmac=,"& for %%a in (%machines%) do if "!tmac:,%%a,=!"=="!tmac!" set "tmac=!tmac!%%a,"
set machines=%tmac:~1,-1%
0 голосов
/ 20 сентября 2018

Один из способов выполнить вашу задачу:

  • Выполнить итерацию машин с помощью for и установить их в массив,
    это перезапишет записи дублета.
  • Читать(отсортированный по альфа) массив возвращается и сохраняется в исходной переменной (требуется отложенное расширение).

:: Q:\Test\2018\09\20\SO_52417320.cmd
@Echo off & Setlocal EnableDelayedExpansion
Set machines=node1,node2,node3,node2,node4,node1,node7,node6,node4

:: clear array machine[], then fill it
For /f "tokens=1 delims==" %%M in ('Set machine[ 2^>Nul') do Set "%%M="
For %%M in (%machines%) do Set "machine[%%M]=%%M"
Set machine[
Echo:    
Set "machines="
For /f "tokens=2 delims==" %%M in ('Set machine[') do Set "machines=!machines!,%%M"

Echo:%machines:~1%

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

> SO_52417320.cmd
machine[node1]=node1
machine[node2]=node2
machine[node3]=node3
machine[node4]=node4
machine[node6]=node6
machine[node7]=node7

node1,node2,node3,node4,node6,node7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...