2016-04-01 16 views
0

net localgroupsを使用してすべての管理者アカウントを削除しようとすると大きな問題が発生します。問題は、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にチェックすることで解決できます。 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に行くとき、あなたはパス上の%variable%の値を取得するために%1を使用できることを意味使用し、~をして追加することができます%~1引用符を削除します。これは、処理を容易にするために、ループの外側に%%Xの値を取ることが主に有効です。


またはループのために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の前後に引用符を追加しました。

関連する問題