批量删除多个管理员账号(Win7)

Deleting multiple admin accounts in Batch ( Win7 )

我在尝试使用 net localgroups 删除所有管理员帐户(除了 2 个 specyfic)时遇到了很大的问题。问题是没有 AND 运算符,所以必须用更难的方法来完成。

for /F "tokens=*" %%G in ('net localgroup administrators') Do (
If %%G == Administrator (goto:ex)
If %%G == MWAdmin (goto:ex)
net localgroup administrators %%G /delete
:ex)

您的问题所在行:

:ex)

这对批处理没有意义,标签不能在代码块中,因为它会破坏块并且批处理会因语法错误而放弃。

您可以通过使用 call 检查块外的帐户名来解决此问题;因为在 call 之后使用 goto :eof 返回到 call,因此允许在 for 循环中离开和返回到它离开的地方。

for /f "tokens=*" %%G in ('net localgroup administrators') do (
    call :checkName "%%~G"
)

:: If name matches if, go back to for loop, else del.
:checkName
if "%~1" == "Administrator" goto :eof
if "%~1" == "MWAdmin" goto :eof     
net localgroup administrators "%~1" /delete
goto :eof

以防万一,让我们突出显示:

call :label "%variable%"

使用这个意味着当它到达:label时,你可以使用%1来获得%variable%的传递值,并且~可以添加%~1 删除引号。这主要用于在 for 循环之外获取 %%X 的值以便于处理。


或者在for循环中使用neq和嵌套的neq方法;

for /f "tokens=*" %%G in ('net localgroup administrators') do (
    if "%%~G" neq "Administrator" (
        if "%%~G" neq "MWAdmin" (
            net localgroup administrators %%G /delete
        )
    )
)

请注意,我将 %%G 改成了 %%~G,并在 AdministratorMWAdmin 周围添加了引号,这是为了稳定性,以防将来的名称导致语法错误.