vbs脚本

 

最近,工作中用到了vbs脚本,发现了一个很坑的问题,需要用vbs脚本去覆盖应用下的dll,但是如果文件是只读属性的,就会报800A0046,没有权限错误,如果该应用正在运行,也会报同样错误,vbs基本没怎么用过,经过多天的学习,终于写了一个可以运行的脚本,供大家分享.

基本功能:

1:判断指定应用是否运行,如果运行,则等待4S,4S后如果仍在运行,则停止该脚本.

2:在复制文件前,先去目标路径下,将要覆盖的文件去除只读属性.

3:使用递归方法,读取将要拷贝的文件,并替换路径,得到目标路径.

具体实现

1:判断指定应用是否运行,如果运行,则等待4S,4S后如果仍在运行,则停止该脚本.

Sub ValidateAppRunning()
Num=0
IEIsAlive=True
strComputer = "." 
Do
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'notepad.exe'") 
If colProcessList.Count>0 Then 
 IEIsAlive=True
 Num= Num + 1
 WScript.Sleep 1000
 If Num > 4 Then WScript.Echo "4s后,notepad.exe仍未关闭"  
 If Num > 4 Then Wscript.Quit
Else 
IEIsAlive=False
WScript.Echo "notepad没运行"
End If 
Loop While IEIsAlive 
End Sub

2:在复制文件前,先去目标路径下,将要覆盖的文件去除只读属性.

Sub SetFileAttributes(path)
  Set fs1= CreateObject("Scripting.FileSystemObject")
  Set file=fs1.GetFile(path) 
  file.Attributes=0 
End Sub

3:使用递归方法,读取将要拷贝的文件,并替换路径,得到目标路径.

Function digui(path)   
Set fs= CreateObject("Scripting.FileSystemObject") 
Set folder = fs.getfolder(path)    
Set subfolders = folder.subfolders    
Set Files = folder.Files    
For Each objFile In Files        
path=Replace(objFile,"\Temp","")
If fs.Fileexists(path) Then SetFileAttributes(path)  
Next    
For Each j In subfolders        
digui (j.path) '递归查找子目录    
Next 
End Function

终于,一个简易的拷贝脚本完成了.

posted @ 2013-06-28 14:31  gavin.huang  阅读(420)  评论(0编辑  收藏  举报