2016-04-01 134 views
0

我尝试使用net localgroups删除所有管理员帐户(除了specyfic之外)有一个很大的问题。问题是没有AND运算符,所以它必须以更困难的方式完成。在批处理中删除多个管理员帐户(Win7)

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) 
+0

这个代码工作,但删除所有的管理员帐户,但管理员,甚至MWAdmin ... – vartier

+0

此外,欢迎堆栈溢出,感谢您的展示尝试并没有居住到详细的细节。将来你可以编辑你的文章来添加错误,而不是留下评论。请记住标记什么解决你的答案与复选标记。 – Bloodied

回答

0

你的问题是该行:

:ex) 

这是没有意义的批次,标签不能在一个代码块,因为它打破了块和批量放弃由于语法错误。

您可以通过检查与call块之外的帐户名解决这个问题;如goto :eofcall回到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报价,这是稳定,套内未来的名称将导致语法错误。