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. |
|
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. 脚本分析
- 变量TESTLIST保存着待共享的路径(以分号分割,最后一个路径也要加分号“;”),后续生产可以设置;
- 采用for循环递归分割TESTLIST,抽取各个路径;
- 在各个路径中取最后的目录名(内部for语句)---这里用到扩展变量;
- 根据抽取的目录名和之前的路径调用net share进行共享;
- OK---全部搞定
5. 测试结果