2016-10-19 6 views
0

バッチスクリプトを使用してWindows 7マシンでホストされているすべての共有を削除しようとしています。Windowsシステムからすべてのネットワーク共有をバッチで削除する

コード

@echo off 

REG QUERY HKLM\System\CurrentControlSet\Services\LanmanServer\Shares > %APPDATA%\shares.txt 

findstr /I /V HKEY_LOCAL_MACHINE %APPDATA%\shares.txt | findstr /I /V HKLM >> %APPDATA%\shares2.txt 

SETLOCAL ENABLEDELAYEDEXPANSION 
for /f "tokens=1" %%S in (%APPDATA%\shares2.txt) do (
    set tempy=%%S 
    net share "!tempy!" /delete 
) 
ENDLOCAL 

(実行後)shares.txt

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Shares 
Test REG_MULTI_SZ CSCFlags=0\0MaxUses=4294967295\0Path=C:\Test\0Permissions=0\0Remark=\0ShareName=Docs\0Type=0 
Sp aces REG_MULTI_SZ CSCFlags=0\0MaxUses=4294967295\0Path=C:\Test\0Permissions=0\0Remark=\0ShareName=Sp aces\0Type=0 

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Shares\Security 

shares2.txt(実行後)

Test REG_MULTI_SZ CSCFlags=0\0MaxUses=4294967295\0Path=C:\Test\0Permissions=0\0Remark=\0ShareName=Docs\0Type=0 
Sp aces REG_MULTI_SZ CSCFlags=0\0MaxUses=4294967295\0Path=C:\Test\0Permissions=0\0Remark=\0ShareName=Sp aces\0Type=0 

私は2つの株式でそれをテストしています、「テスト」と

私は test共有を削除することができました「Spがエース」が、 "tokens=1"は最初の単語だけをつかむので、私は sp aces共有を削除することができませんでした。これを調整して、単一の単語や空白のある単語でも機能するようにするにはどうすればよいですか?

+0

1 'セットTEMP = %% S' - > '設定TEMP = %% S'または'設定 "TEMP = %% S" '。 2.システムで既に使用されているので、変数名 'temp'を使用しないでください。 – aschipfl

+0

' tokens = 1'を 'tokens = *'(先頭の空白を削除)または 'delims ='何も削除しないでください)... – aschipfl

+0

tokens = *を使用すると、名前だけでなく、2番目のテキストファイルから行全体が渡されます。そして、共有名の長さは任意です。したがって、私はそれに応じてトークンを設定することはできません。 – Conash

答えて

0

...仮に:

  • shares2.txtは、カラム分離などの4つの隣接するスペースを使用します。
  • 共有名には4つの隣接スペースが含まれていません。
  • 共有名には|文字が含まれていません。
  • 共有名には、!文字が含まれていません。
  • 共有名は;文字で始まらない。

...次のコードは、あなたのために働くかもしれない:ここで

setlocal EnableDelayedExpansion 
for /F "usebackq delims=" %%S in ("%APPDATA%\shares2.txt") do (
    set "tempy=%%S" 
    for /F "tokens=1 delims=|" %%N in ("!tempy: =|!") do (
     net share "%%N" /delete 
    ) 
) 
endlocal 

は、共有名が!を含むようにして;で開始することができます改善の変異体である:

setlocal DisableDelayedExpansion 
for /F "usebackq delims=" %%S in ("%APPDATA%\shares2.txt") do (
    set "tempy=%%S" 
    setlocal EnableDelayedExpansion 
    for /F "tokens=1 delims=|" %%N in (^""!tempy: =|!"^") do (
     endlocal 
     net share "%%~N" /delete 
    ) 
) 
endlocal 
+0

私が働いている株式にこのような文字が含まれることはほとんどありません。読みやすいコードと答えをありがとう! – Conash

0

バッチファイル1つ、一時ファイルなし、完全にテストされていない、一部のデータタイプでも機能しない可能性あり:

@Echo Off 
For /F "Tokens=2* Delims==;" %%A In ('WMIC Class StdRegProv Call EnumValues^ 
"&H80000002"^, "System\CurrentControlSet\Services\LanmanServer\Shares" 
^|Find "sNames"') Do Set "_=%%A" 
For %%A In (%_:~2,-1%) Do Net Share %%A /Delete 
+0

こんにちはCompo。私は自分のコンピュータ上に2つの共有を作成し、いずれか1つを列挙しません。 – Squashman

+0

@Squashman - 間違いを見つけて編集しました – Compo

関連する問題