CMD输出中的空白区域搞乱了命令

时间:2017-11-30 17:29:24

标签: batch-file cmd

所以我有一个脚本可以抓取用户列表,然后为所有用户设置密码,这很简单吧?但是,当我获得使用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

1 个答案:

答案 0 :(得分:0)

如果您通过WMIC命令发送Call输出,则会删除任何前导或尾随空格!

@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