【问题标题】:White space in CMD output messing up commandsCMD 输出中的空格弄乱了命令
【发布时间】:2017-11-30 17:29:23
【问题描述】:

所以我有一个脚本可以获取用户列表,然后为所有用户设置密码,够简单吧?但是,当我使用 wmic 输出(使用循环将其转换为更正的格式)获取用户列表时,每个用户都会获得类似于

的输出
    "Administrator      "
    "Guest         "
    "DefaultAdmin       "
    ...

现在需要在循环中使用此列表来设置密码,这是一个简单的 for 循环来设置密码,但是当您在命令提示符下使用这些用户时,它会将它们视为

    net user "Administrator      " Password

在这种情况下,没有 6 个空格的管理员

我的问题是如何在不手动进入文本文档的情况下删除名称后的空格?

    (for /F "skip=1 delims=" %%X in ('wmic UserAccount where "LocalAccount=True" get Name') do (
        for /f "delims=" %%Y in ("%%X") do (echo %%Y)
    ))>AllUsers.txt

【问题讨论】:

标签: batch-file cmd


【解决方案1】:

如果您通过Call 命令发送WMIC 输出,它将为您删除所有前导或尾随空格!

@Echo Off
For /F Tokens^=2^Delims^=^" %%A In ('WMIC Path Win32_UserProfile Where^
 "Special!='True'" Assoc /AssocClass:Win32_UserAccount 2^>Nul'
) Do For /F "Skip=1Delims=" %%B In ('WMIC UserAccount Where^
 "SID='%%A' And LocalAccount='TRUE'" Get Name') Do For /F "Tokens=*" %%C In (
    "%%B") Do Call :Sub %%C
Pause
Exit/B

:Sub
Echo=Net User "%*" Password
GoTo :EOF

从倒数第二行删除Echo= 以实际调用Net User 命令

编辑

...还有一个基于aschipfl's comment 中提到的方法的简单示例:

@Echo Off
For /F "Tokens=1*Delims==" %%A In ('WMIC UserAccount Where^
 "LocalAccount='TRUE'" Get Name /Value') Do For /F "Tokens=*" %%C In (
    "%%B") Do Echo=Net User "%%C" Password
Pause

【讨论】:

  • 这很正常,唯一的问题是它也能找到域用户。我不需要因为我需要它而找到它们
  • @aschiphls 发表的评论似乎按预期工作,只需稍作修改,以确保我不会意外抓取我网络上数千个域用户的列表
  • @IdioticProphet,我已经更新了两个示例以排除非本地用户的输出名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多