' sIniDir 为初始化目录
' sFilter 为文件后缀 示例:"*.*,*.txt"
Function GetFileDlgEx(sIniDir, sFilter, sTitle)
sIniDir = Replace(sIniDir, "\", "\\")
' Set regex = New RegExp
Set regex = CreateObject("VBScript.RegExp")
regex.Global = True
regex.MultiLine = True
regex.Pattern = ";|\|"
sFilter = regex.Replace(sFilter, ",")
DIM sf
For Each i In Split(sFilter, ",")
sf = sf & i & "|" & i & "|"
Next
sFilter = sf
hta="""about:" & _
""""
Set oDlg = CreateObject("WScript.Shell").Exec("mshta.exe " & hta)
oDlg.StdIn.Write "var iniDir='" & sIniDir & "';var filter='" & sFilter & "';var title='" & sTitle & "';"
GetFileDlgEx = oDlg.StdOut.ReadAll
End Function
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
' 获取当前用户桌面
f = GetFileDlgEx(WshShell.SpecialFolders("Desktop"), "*.war", "选择WAR包")
If f = "" Or IsNull(f) Then
MsgBox "请选择WAR包!", 48
Wscript.Quit
End If
Set fObj = fso.GetFile(f)
Set fPf = fObj.ParentFolder
fName = fObj.name
oldFolder = Replace(fObj.path, ".war", "")
If fso.folderExists(oldFolder) Then
MsgBox "文件夹" & oldFolder & "已经存在!", 48
Wscript.Quit
End If
unWar = oldFolder & "\" & fName
' 创建文件夹
fso.CreateFolder(oldFolder)
' 复制文件
fso.CopyFile f, unWar, True
' 切换工作目录
WshShell.CurrentDirectory = oldFolder
' 解压WAR包
resCode = WshShell.Run("jar -xvf " & unWar, 0, True)
If resCode <> 0 Then
MsgBox "WAR包解压错误!", 48
Wscript.Quit
End If
' 删除文件
fso.DeleteFile(unWar)
' WshShell.CurrentDirectory = fso.GetFolder(".").Path
WshShell.CurrentDirectory = fso.GetFile(Wscript.ScriptFullName).ParentFolder.Path
' On Error Resume Next ' 捕获异常
copyPath = oldFolder & "_copy" ' 复制后的路径
' If Err <> 0 Then
' MsgBox "文件夹未正确选择!" & Err.Description, 48
' Err.clear ' 错误被手工处理后要记得清除err对象的内容
' Wscript.Quit
' End If
' On Error Goto 0 ' 关闭错误捕获
' 输出选择的文件路径
' MsgBox "当前选择的文件:" & chr(13) & f, 64
' 打开对话框
Set oExec = WshShell.Exec("mshta javascript:""提示:可从SVN日志中查找到文件""")
arg = oExec.StdOut.ReadAll
' arg = InputBox("多个文件之间以空格分割" & vbCrLf & vbCrLf & "提示:可从SVN日志中查找到文件", "要打包的文件", "")
If arg = "" Then
MsgBox "请输入要打包的文件!", 48
Wscript.Quit
End If
s = Replace(arg, ".java", "*")
With New RegExp
.Global = True
.MultiLine = True
.Pattern = vbCrLf & "|" & vbCr & "|" & vbLf
s = .Replace(s, " ")
End With
' https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/robocopy
resCode = WshShell.Run("robocopy /ndl /njh /njs /s """ & oldFolder & """ """ & copyPath & """ " & s, 0, True)
If resCode > 8 Then
MsgBox "增量文件复制错误!", 48
Wscript.Quit
End If
' 删除文件
fso.DeleteFolder(oldFolder)
If fso.folderExists(copyPath) Then
MsgBox "执行成功!", 64
' WshShell.Explore(copyPath)
Else
MsgBox "执行失败!", 48
End If