windows - FOR 循环变量中的空格问题 - 批处理脚本

标签 windows batch-file command-line cmd scripting

我正在编写一个批处理脚本,它将使用 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/

相关文章:

windows - IIS 用户目录,如 linux public_html

database - 对具有良好文档的 Cassandra IDE 的建议,以便在 Windows 操作系统中工作

syntax - 批处理脚本: The syntax of the command is incorrect - when script is going trough subdirectories?

java - 执行命令并提示输入 YES

java - 编译代码 - 创建 IDE

c++ - 由于查找 Windows.h 时出现问题,无法设置 openGL superBible 示例

batch-file - 如何使用 NSIS 创建管理员快捷方式?

windows - 如何使用批处理命令在 hudson 中使构建失败

混帐上传包 : command not found

c++ - 在多个平台上构建程序?