获取 CMD 命令的输出并将其设置为批处理变量

获取 CMD 命令的输出并将其设置为批处理变量

我运行此命令来获取组的名称:

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  "

我不希望在 users 末尾出现这些空格。我只想要这样的输出:"Remote Desktop Users"

答案1

WMIC 的输出是 unicode !

<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

答案2

用不同的方法得到相同的结果作者:ThunderJun:

OP1:这里我们使用 setlocal 来激活延迟类型的特殊变量的使用(!var!)而无需在另一个 for 中使用 for。以获得相同的结果。

OP2:在这里,我们将命令分配到一个通用类型变量中,并借助竖线将多个命令组合在一起,始终优先考虑优先级。我们添加过滤器:more +1 以指示忽略第一个输出行,然后添加过滤器:findstr /i "remot" 和另一个竖线,通过这个我们指示,只打印包含引号中的关键字且不区分大小写字母的行。然后我们使用一个通用类型变量来指示它,不显示最后 3 个字符:%var:~0,-3% 这样,我们无需在另一个 for 中使用 for 即可获得相同的结果。

OP3:在这里我们使用 setlocal 来激活延迟类型的特殊变量的使用(!var!)。在 for 中的命令末尾有一个竖线。为此,我们使用命令 findstr /i“remot”指定一个过滤器,表示它只打印引号中带有关键字的行,并且不区分大小写字母。我们使用延迟类型的特殊变量来捕获命令输出,并表示用 2 个空格字符替换为空(!var:=!),以实现相同的结果,而无需在另一个 to 中使用 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

相关内容