gpt4 book ai didi

excel - 从 Zip 文件中删除文件夹

转载 作者:行者123 更新时间:2023-12-02 01:16:17 25 4
gpt4 key购买 nike

我正在尝试从 Zip 文件中删除文件夹。

所以我的文件结构是这样的:

enter image description here

内部优先:

enter image description here

我尝试使用此处的代码 Deleting Files from A Zip作者:Siddharth Rout,但它只移动文件,显然文件夹变空,但没有从 Zip 中删除

代码:

Sub del()


Dim oApp As Object
Dim fl As Object
Set oApp = CreateObject("Shell.Application")

For Each fl In oApp.Namespace("C:\Users\mohit.bansal\Desktop\Test\test\first.zip\first").Items
'Path to a folder inside the Zip
oApp.Namespace("C:\Users\mohit.bansal\Desktop\Test\test\Dump").MoveHere (fl.path)
Next

End Sub

显然,它将所有文件移动到 Dump 文件夹中,但名为 Second 的文件夹在 Zip 中保持不变。尽管第二个中的所有文件也被移动。

之后我可以使用命令 Kill & RmDir 来删除移动的文件和文件夹。但是如何使第二个文件夹从 Zip 中消失。

注意:

  • 我并不是要从 Zip 中移动所有文件,这只是为了保持代码简短的测试条件。
  • 我并不是在寻找解决方法来解压缩文件、删除文件夹并重新压缩所有内容。
  • 如果需要任何其他信息,请告诉我。

最佳答案

我能够删除该文件夹。

CreateObject("Shell.Application").Namespace("C:\Users\mohit.bansal\Desktop\Test\test\first.zip\first\second").Self.Verbs.Item(4).DoIt

正如 GSerb 指出的那样,最好使用 InvokeVerb)"Delete" 删除文件夹。

 CreateObject("Shell.Application").Namespace("C:\Users\mohit.bansal\Desktop\Test\test\first.zip\first\second").Self.InvokeVerb ("Delete")

我无法抑制文件删除确认对话框。 enter image description here

<小时/>

因此,使用 .Self.Verbs.Item(4) 我们可以访问从 0 开始的右键单击选项。

演示:

enter image description here

附录

我的最终工作解决方案是将 Xip 文件的内容复制到临时文件夹,删除子文件夹,删除原始 zip 文件,创建一个新的 zip 文件,然后将其余项目复制到新的 zip 文件。

用法:

  DeleteZipSubDirectory "E:\first.zip","\first\second"   
Sub DeleteZipSubDirectory(ZipFile As Variant, SubFolderRelativePath As Variant)
Dim tempPath As Variant

'Make Temporary Folder
tempPath = Environ("Temp") & "\"
Do While Len(Dir(tempPath, vbDirectory)) > 0
tempPath = tempPath & "0"
Loop
MkDir tempPath

Dim control As Object
Set control = CreateObject("Shell.Application")
'Copy Zip Contents to Temporary Folder
control.Namespace(tempPath).CopyHere control.Namespace(ZipFile).Items

'Debug.Print tempPath

With CreateObject("Scripting.FileSystemObject")
'Delete Target Folder
.DeleteFolder tempPath & SubFolderRelativePath
'Delete Original FIle
Kill ZipFile

'First we create an empty zip file: https://www.exceltrainingvideos.com/zip-files-using-vba/
Open ZipFile For Output As #1
Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
Close #1

'Copy the Remaining Items into the new Zip File
control.Namespace(ZipFile).CopyHere control.Namespace(tempPath).Items
Application.Wait Now + TimeValue("0:00:02")
'Delete Temporary Folder
.DeleteFolder tempPath
End With
End Sub

感谢 Mikku 和 SiddharthRout 的帮助。

关于excel - 从 Zip 文件中删除文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57490063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com