批量关闭共享文件

1378阅读 0评论2008-09-09 zhongtang
分类:WINDOWS

很久不写博客,前几天在工作中弄出来一个有意思的东西,忍不住拿出来晒晒!
 
情况描述:
假设一个目录里有一堆文件,这些文件给很多人共享使用。大家都知道在windows里的共享后,别人一旦远程打开这个文件后,如果你要更新这个文件,就必须断开共享。断开整个共享的后果是所有打开的文件都被断开,不适用于只更新一堆文件中某一个文件的情况。
 
在windows里还有个方法,可以到[管理-共享-打开文件]里,挨个断开要更新的文件,这种方法有个最大的问题,当使用共享的人特别多的时候,可能来不及更新,这个要更新的文件又被客户端重新打开,这个过程就是大家比赛操作速度。
可能"惰性"是所有创造的“原罪”吧,因为日常工作经常需要更新文件服务器上的共享目录的程序,每次更新的过程都是一个忍受这个重复操作的过程(偶对所有的重复操作有种无法抑制的反感,所以经常会去想找个方法来代替^_^),终于有一天想,写个脚本吧,来完成这个操作。

经过一个下午的摸索,总算不辱使命,废话不说,上代码!

@echo off&setlocal EnableDelayedExpansion
 
::定义上传目录,每次先把要更新的文件先放到这个临时目录
set "uploadpath=D:\upload"

::定义待更新目录,也就是共享目录,更新就是把本目录的文件替换成临时目录的文件
set "sharepath=D:\sinodms"

set /p file=请输入要更新的文件(如:user_002.pbd):
echo "1.1开始备份%sharepath%\%file% ... "
copy %sharepath%\%file% %sharepath%\old /y
set "longfile=%sharepath%\%file%"
echo "1.2开始更新%uploadpath%\%file% ... "
 
::echo longfile ---%longfile%
::先枚举所有打开的文件
for /f "skip=4 tokens=1,2* delims= " %%i in ('net file') do (
  if "%%j" equ "%longfile%" (
  echo 杀掉id"%%i"
  ::echo 文件"%%j"
  ::下面是关键,杀掉一个共享文件,net file id /close
  net file %%i /close >null
 )
)
copy %uploadpath%\%file% %sharepath%  /y
echo "更新%uploadpath%\%file% 成功 !!! "
pause
上一篇:智力测验
下一篇:超级损人(汗)