基于7z的智能解壓腳本
順便演示了一下如何用 vbs 操縱注冊(cè)表右鍵菜單
放到7z文件夾運(yùn)行即可
也可以用 sendto菜單、hoekey熱鍵之類調(diào)用
可以到網(wǎng)盤下載帶7z的懶人包:
http://pan.baidu.com/share/link?shareid=1605&uk=1426753336
Smart7zX.vbs 基于7z的智能解壓
'------------------------------------------------------------------------------------ 'Smart7zX.vbs Ver 1.2 '基于7z的智能解壓腳本 '主要解決 “解壓到文件夾”導(dǎo)致的文件夾套文件夾 和 “解壓縮到當(dāng)前文件夾”導(dǎo)致的文件混亂矛盾 '發(fā)現(xiàn) 7z 的重復(fù)文件處理還蠻對(duì)口味的,就懶得自己搞了 '整個(gè)代碼很簡(jiǎn)單,有需要的自己改 '詳細(xì)介紹見作者主頁 http://hi.baidu.com/new/hyhoekey '------------------------------------------------------------------------------------
'On Error Resume Next
Dim WshShell, fso, backMsgBox Set WshShell = CreateObject("WSCript.Shell") Set fso = CreateObject("scripting.filesystemobject")
'--------------------------------------------------------------------- '幫助與右鍵菜單關(guān)聯(lián),可按需添加 '--------------------------------------------------------------------- If WScript.Arguments.Count = 0 Then
backMsgBox = MsgBox(vbCrLf & WScript.ScriptName & vbTab & "Smart7zX 智能解壓" & vbCrLf & vbCrLf & vbCrLf _ & "Usage: " & vbTab & WScript.ScriptName & vbTab & "zipfile" & vbCrLf & vbCrLf _ & "Examples: " & vbCrLf & vbCrLf _ & WScript.ScriptName & " ABC.zip" & vbCrLf & vbCrLf _ & WScript.ScriptName & " XYZ.rar" & vbCrLf & vbCrLf _ & WScript.ScriptName & " 123.7z" & vbCrLf & vbCrLf _ & vbCrLf & vbCrLf _ & "按【是】 在 壓縮文件 右鍵菜單添加!" & vbCrLf & vbCrLf _ & "按【否】 從 壓縮文件 右鍵菜單刪除!" & vbCrLf & vbCrLf _ & "按【取消】 退出。" & vbCrLf & vbCrLf & vbCrLf _ & "http://hi.baidu.com/new/hyhoekey" _ , 67, WScript.ScriptName)
If backMsgBox <> vbCancel Then RightMenuMgr("zip") RightMenuMgr("rar") RightMenuMgr("7z") End If WScript.Quit(0) End If
'--------------------------------------------------------------------- '主腳本 '---------------------------------------------------------------------
exe_7z = Replace(WScript.ScriptFullName, WScript.ScriptName, "7z.exe") exe_7zG = Replace(WScript.ScriptFullName, WScript.ScriptName, "7zG.exe") File_Folder = fso.GetParentFolderName(WScript.Arguments(0)) File_BaseName = fso.GetBaseName(WScript.Arguments(0))
Set oexec = WshShell.Exec(exe_7z & " l " & Chr(34) & WScript.Arguments(0) & Chr(34)) str = oExec.StdOut.ReadAll
ss = split(str, "------------------- ----- ------------ ------------ ------------------------" & vbCrLf, -1, 1) strLine = split(ss(1), vbCrLf, -1, 1)
'WScript.Echo str
Num_Top = 0 '頂層文件或文件夾數(shù)量 Num_Folder = 0 '子文件夾中文件數(shù)量 Name_Folder = 0 '從 子文件夾中文件 獲取的 頂層文件夾名字 Name_TopFolder = 0 '7z獲取的 D屬性頂層文件夾名字 Folder_equal = 0 ' Unzip_Current = 0 '
For i = 0 To (UBound(strLine) - 1) If InStr(strLine(i), "\") = 0 Then Num_Top = Num_Top + 1 If Mid(strLine(i), 21, 1) = "D" Then Name_TopFolder = Right(strLine(i), Len(strLine(i)) - 53) Else Num_Folder = Num_Folder + 1 Name_Folder = Mid(strLine(i), 54, InStr(strLine(i), "\") - 54) End If Next
If UBound(strLine) = 1 Then Unzip_Current = 1 If Len(ss(1)) - Len(Replace(ss(1), " " & Name_Folder & "\", "", 1, -1, 1)) = Len(" " & Name_Folder & "\") * Num_Folder Then Folder_equal = 1 If Folder_equal Then If Num_Top = 0 Then Unzip_Current = 1 If Num_Top = 1 And Name_Folder = Name_TopFolder Then Unzip_Current = 1 End If
If Unzip_Current = 1 Then WshShell.run exe_7zG & " x " & Chr(34) & WScript.Arguments(0) & Chr(34) & " -o" & Chr(34) & File_Folder & Chr(34) Else WshShell.run exe_7zG & " x " & Chr(34) & WScript.Arguments(0) & Chr(34) & " -o" & Chr(34) & File_Folder & "\" & File_BaseName & Chr(34) End If
'------------------------------------------------------------------------ '右鍵菜單管理函數(shù) '------------------------------------------------------------------------ Sub RightMenuMgr(ExtName) Dim RegFileKey RegFileKey = "HKCR\" & WshShell.RegRead("HKCR\." & ExtName & "\")
Select Case backMsgBox Case vbYes WshShell.RegWrite RegFileKey & "\shell\Smart7zX\", "Smart7zX 智能解壓(&7)" WshShell.RegWrite RegFileKey & "\shell\Smart7zX\command\", "WScript.exe " & """" & WScript.ScriptFullName & """" & " " & """" & "%1" & """" Case vbNo WshShell.RegDelete RegFileKey & "\shell\Smart7zX\command\" WshShell.RegDelete RegFileKey & "\shell\Smart7zX\" Case Else End Select
End Sub
|