我正在编写一个批处理脚本,它将使用 WMIC 命令获取 Windows 机器上所有组的列表,使用 net localgroup <groupname>
获取组信息, 然后将信息写入输出文件。这是我所拥有的:
for /f "skip=1" %%a in ('"wmic group get name"') do net localgroup %%a >> "%OUTPUTFILEPATH%" 2> nul && echo. >> "%OUTPUTFILEPATH%" && echo ^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^= >> "%OUTPUTFILEPATH%" && echo. >> "%OUTPUTFILEPATH%"
我遇到的问题似乎是获取关于 %%a
的报价do net localgroup %%a
中的变量因为它输出像 Administrators 这样的组的信息就好了,但是当它到达像 Remote Desktop Users 这样的组名时,它无法返回该组的信息。
换句话说,这似乎是在 FOR 循环中发生的事情:
net localgroup Administrators
net localgroup Remote Desktop Administrators
第一次操作成功。第二个不是。显然,需要在 Remote Desktop Administrators 周围加上引号才能将其视为一个参数,但我不太清楚如何为我的 %%a
实现这一点。 FOR循环变量。
我试过在 "%%a"
周围加上引号和 '%%a'
.这没有帮助。
任何输入将不胜感激。
最佳答案
快速眼动
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "OUTPUTFILEPATH=u:\ofp.txt"
DEL /F /Q "%outputfilepath%"
for /f "skip=1delims=" %%a in ('wmic group get name') do (
SET "group=%%a"
CALL :loptrail
IF DEFINED group (
net localgroup "!group!" >> "%OUTPUTFILEPATH%" 2> NUL
echo.>> "%OUTPUTFILEPATH%"
echo ==========================================>> "%OUTPUTFILEPATH%"
echo.>> "%OUTPUTFILEPATH%"
)
)
GOTO :EOF
:loptrail
SET "group=%group:~0,-1%"
IF "%group:~-1%"==" " GOTO loptrail
GOTO :eof
问题是 wmic
输出是 unicode 和 %%a
需要 delims=
否则它返回第一个 [implicit-space]-delimited token。
不幸的是,这意味着 %%a
包含尾随空格,即 net
似乎不赞成。
由于批处理不允许对元变量进行子字符串化,因此您需要将其放入公共(public)环境变量中并调用 enabledelayedexpansion
.
group
中的值似乎被额外的 NULL
终止, 所以 :loptrail
例程首先任意删除最后一个字符,然后是任何剩余的尾随空格。
wmic
的最后一行输出将生成一个荒凉的空 group
所以 net
只有在 group
时才会进行处理是非空的。
关于windows - FOR 循环变量中的空格问题 - 批处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35262862/