windows bat系列10:批量設定&取消共享目錄

那個少年發表於2018-07-23

1. 背景

在使用Windows過程中,經常要設定共享目錄,用完之後,又要取消共享目錄,如果只設定一次還好(直接右鍵—共享),但若有多個固定的目錄需要設定再取消,單個單個的設定就會很low,因而思考更快捷的解決方案:使用DOS指令碼。

2. dos命令

windows下網路共享主要是用net命令實現,其有多個子命令,如:

Command

Sub-command

annotation

菜鳥翻譯

例子

Net

View

NET VIEW displays a list of resources being shared on a computer. When used without options, it displays a list of computers in the current domain or network.

  1. 檢視共享資源;
  2. 檢視當前域(網路)PC數量

Net view—檢視域中PC數量

Share

NET SHARE makes a server's resources available to network users.

目錄共享

D:\myself\windows_script>net share help="D:\myself\windows_script\help" /grant:everyone,full

共享我的help檔案,使用者為everyone,許可權為full(可讀//修改),其中help共享名

net share help delete --停止剛才的help共享

Stop

NET STOP stops Windows services.

停止windows服務

Net stop

Start

NET START lists running services.

啟動或檢視已經啟動的windows服務

Net start

 

 

 

3. 指令碼化

@echo off
Rem close echo
 
Rem chane active page
chcp 437 >nul
Rem delay expansion
setlocal enabledelayedexpansion
 
Rem set parameters
set TESTLIST=D:\myself\windows_script\bat_out;D:\myself\windows_script\bat_test;D:\myself\windows_script\testnull;
set TMPLIST=%TESTLIST%
 
Rem print title

echo=
echo=
echo ---------------------------%date% %time:~0,8%---------------------------
 
set /a NUM = 1
:loop
for /f "tokens=1* delims=;" %%a in ("%TMPLIST%") do (
	
	Rem set local parameters
	echo #!NUM! is %%a
	
	Rem share_the_dir
	for %%h in ("%%a") do (
		net share %%~nh="%%a" /GRANT:everyone,FULL
	)
 
	Rem recursion
	set TMPLIST=%%b
)
if defined TMPLIST goto :loop
 
Rem 
echo=
echo=
 
endlocal

pause

4. 指令碼分析

  1. 變數TESTLIST儲存著待共享的路徑(以分號分割,最後一個路徑也要加分號“;”),後續生產可以設定;
  2. 採用for迴圈遞迴分割TESTLIST,抽取各個路徑
  3. 在各個路徑中取最後的目錄名(內部for語句)---這裡用到擴充套件變數
  4. 根據抽取的目錄名和之前的路徑呼叫net share進行共享;
  5. OK---全部搞定

5. 測試結果

相關文章