2016-10-19 59 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 

我與兩股測試它,「測試」和「SP尖子」

我能夠刪除test份額,但我無法刪除sp aces份額,因爲"tokens=1"只抓住第一個字。我怎樣才能調整它,使它適用於單詞和空格單詞?

+0

1.'set temp = %% S' - >'set temp = %% S'或'set「temp = %% S」'; 2.不要使用變量名'temp',因爲這已經被系統使用... – aschipfl

+0

將'tokens = 1'更改爲'tokens = *'(刪除前導空格)或'delims ='(不刪除任何東西)... – aschipfl

+0

使用令牌= *雖然不是名稱,但是從第二個文本文件傳遞整行。而共享名稱的長度是任意的,所以我不能相應地設置令牌。 – Conash

回答

0

假設...:

  • shares2.txt使用四個相鄰空間作爲列分離器;
  • 共享名稱不包含四個相鄰空格;
  • 該共享名稱不包含|字符;
  • 共享名稱不包含!字符;
  • 股份名稱不以;字符開頭;

...下面的代碼可能爲你工作:

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

一個批處理文件,沒有臨時文件,完全未經測試,甚至可能不適用於某些數據類型:

@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

Hi Compo。我在我的電腦上創建了兩個共享,並沒有列舉其中的一個。 – Squashman

+0

@Squashman - 找到並編輯了錯誤 – Compo

相關問題