Получить вывод команды CMD и установить его в пакетную переменную

6

Я запускаю эту команду, чтобы получить имя группы:

set "remotegroup="
     for /f "skip=1delims=" %%a in (
     '"wmic group where sid="S-1-5-32-555" get name"'
     ) do if not defined remotegroup set "remotegroup=%%a"

но когда я делаю это, echo "%rdpgroup%"вывод выглядит так:

"Remote Desktop Users  "

Я не хочу эти пробелы в конце пользователей. Просто хочу вывод, как это:"Remote Desktop Users"

Ария Фатхи
источник
В прошлом у меня была похожая ошибка, точно не помню, но я думаю, что она была устранена путем удаления случайных пробелов в моем скрипте. По какой-то причине cmd добавляет ненужные пробелы, потому что в моем скрипте есть пробелы. Попробуйте удалить все пробелы, которые не являются абсолютно необходимыми. Я знаю, это звучит случайно, но в моем случае это сработало.
IronWilliamCash
@IronWilliamCash именно то, что мне нужно, чтобы удалить эти пробелы. Я не знаю как
Ария Фати
Вы можете удалить нежелательные пробелы с помощью этой формы команды, просто добавьте ее в соответствующую часть скрипта: set "rdpgroup =! Rdpgroup: =!" (он просто преобразует два пробела в один пробел, но вы можете изменить его, например, чтобы преобразовать 4 пробела в один пробел или преобразовать 3 пробела в пробелы - есть много возможностей).
Ed999

Ответы:

7

Вывод WMIC - это юникод!

Трейлинг <CR>можно удалить, передав значение через другой цикл FOR / F. Это также удаляет фантомную «пустую» строку (на самом деле а <CR>)

@echo off
set "remotegroup="
for /f "skip=1 delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name"') do (
    for /f "delims=" %%b in ("%%a") do if not defined remotegroup set "remotegroup=%%~nb"
)
echo "%remotegroup%"
pause
Hackoo
источник
0

Разные способы получить одинаковые результаты

OP1: Здесь мы используем setlocal, чтобы активировать использование специальных переменных с задержанным типом (! Var!) Без использования for внутри другого for. Чтобы получить тот же результат.

OP2: Здесь мы назначаем команду в переменной общего типа и с помощью вертикальной черты объединяем несколько команд, всегда с приоритетом. Мы добавляем фильтр: еще +1, чтобы указать, чтобы игнорировать первую выходную строку, а затем добавляем фильтр: findstr / i «remot» с другой вертикальной чертой, с этим мы указываем, что печатаются только те строки, которые содержат ключевое слово в кавычки и что не делает различий между заглавными и строчными буквами. Затем мы используем переменную типа common, указывающую на нее, чтобы не показывать последние 3 символа:% var: ~ 0, -3% Таким образом, мы получаем тот же результат, не используя for внутри другого for.

OP3: Здесь мы используем setlocal, чтобы активировать использование специальных переменных замедленного типа (! Var!). С вертикальной чертой, в конце команды внутри для. Для этого мы назначаем фильтр с помощью команды: findstr / i «remot», указывающей, что он печатает только строки с ключевым словом в кавычках и который не различает прописные и строчные буквы. Мы используем специальную переменную отложенного типа, чтобы захватить вывод команды, и мы указываем заменить 2 символа пробелов даром (! Var: =!), Чтобы достичь того же результата, не используя for для другого.

@echo off

:::::::::::::OP1 START. BY ThunderJun
setlocal enabledelayedexpansion
set remotegroup=
for /f "skip=1 delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name"') do (
set remotegroup=%%a!remotegroup:~0,-4!
set rio=!remotegroup:~0,-1!
set remotegroup=!rio:~0,-1!
)
echo  OP1 "%remotegroup%"
:::::::::::::OP1 END

:::::::::::::OP2 START. BY ThunderJun
set a='"wmic group where sid="S-1-5-32-555" get name |more +1 |findstr /i "remot""'
for /f "delims=" %%c in (%a%) do (set remotegroup=%%c)
echo  OP2 "%remotegroup:~0,-3%"
:::::::::::::OP2 END

:::::::::::::OP3 START. BY ThunderJun
setlocal enabledelayedexpansion
set remotegroup=
for /f "delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name |findstr "remot""') do (
    set remotegroup=%%~na& set remotegroup=!remotegroup:  =!)
echo  OP3 "%remotegroup%"
:::::::::::::OP4 END


pause
ThunderJun
источник
Если вы просто цитируете ответ Hackoo , пожалуйста, не делайте этого. Если вы представляете улучшенную версию, укажите, что вы изменили.
Скотт
Хорошо, друг, спасибо за предложение
ThunderJun