zoukankan      html  css  js  c++  java
  • 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 & "
    ootcimv2") 
    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

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

  • 相关阅读:
    下载安装Git,学习笔记
    php面试相关整理
    2.5 DQL 分组查询
    2.4 DQL 常见函数
    2.3 DQL 排序查询
    2.2 DQL 条件查询
    2.1 DQL 基础查询
    1.2 MySQL的介绍
    1.1 数据库的相关概念
    2019年JavaEE学习线路
  • 原文地址:https://www.cnblogs.com/gavinhuang/p/3160791.html
Copyright © 2011-2022 走看看