标题: [文件操作] [已解决]批处理如何从含多层嵌套文件夹的zip中解出有具体文件名不知具体位置的文件 [打印本页]
作者: lforl 时间: 2024-5-29 18:15 标题: [已解决]批处理如何从含多层嵌套文件夹的zip中解出有具体文件名不知具体位置的文件
本帖最后由 lforl 于 2024-5-30 10:18 编辑
有个体积很大的zip(如名叫big.zip)含有多层嵌套文件夹,想从此zip中一解压出一个知道文件名的文件(如名叫abc.txt),单文件处于那一层嵌套文件夹位置未知,命令行该怎么写?期待大佬指点。
作者: Five66 时间: 2024-5-29 19:01
试试
7z x big.zip abc.txt -r
作者: buyiyang 时间: 2024-5-29 20:46
ExtractFile.vbs- strZipPath = "R:\big.zip"
- strExtractFileName = "abc.txt"
-
- Set objShell = CreateObject("Shell.Application")
- Set objFso = CreateObject("Scripting.FileSystemObject")
- Set objFolder = objShell.NameSpace(strZipPath)
- If Not objFolder Is Nothing Then
- Dim fileIndex
- fileIndex = 0
- Call RecurseZip(objFolder, "", fileIndex, strExtractFileName)
- Else
- WScript.Echo "Cannot find or open the zip file."
- End If
-
- Sub RecurseZip(objFolder, strPath, ByRef fileIndex, strFileName)
- For Each objItem in objFolder.Items
- strCurrentPath = strPath & objItem.Name
- If objItem.IsFolder Then
- Call RecurseZip(objShell.NameSpace(objItem.Path), strCurrentPath & "\", fileIndex, strFileName)
- Else
- If objItem.Name = strFileName Then
- strDestPath = currentPath & Replace(strFileName, ".", "_" & fileIndex & ".")
- objShell.NameSpace(objFso.GetAbsolutePathName(".")).CopyHere objItem
- Do Until objFso.FileExists(objFso.GetAbsolutePathName(".")& "\" & strFileName)
- WScript.Sleep 100
- Loop
- objFso.MoveFile objFso.GetAbsolutePathName(".") & "\" & objItem.Name, strDestPath
- WScript.Echo "Extracted: " & strCurrentPath & " to " & strDestPath
- fileIndex = fileIndex + 1
- End If
- End If
- Next
- End Sub
复制代码
作者: lforl 时间: 2024-5-29 21:10
本帖最后由 lforl 于 2024-5-29 21:35 编辑
试试
7z x big.zip abc.txt -r
Five66 发表于 2024-5-29 19:01
很妙,-r一个参数搞定,简洁明了,高效!
使用了-r参数,得到的是文件夹,内部存放了我要解压的文件。
不知能否做到:
1.递归找到文件并释出后,就终止7z和控制台。因为zip文件挺大,不想让他继续往下查,而占用资源。
是否必要,因为我感觉8G的zip似乎也是几十秒出结果。(48G内存,i9 cpu)
2.解压结果只要文件释出,而不出现那些文件夹吗?比如我要那个文件直接放在bat所在目录中。
作者: Five66 时间: 2024-5-29 23:36
回复 4# lforl
1应该是要一直查才知道符不符合吧,不知道,大概不行
2的话用可以e选项解压,不过因为名字相同,还得加上-aot或-aou选项来自动重命名,不过最好还得加上-o选项来指定输出文件夹,例如:7z e -aot -obig big.zip abc.txt -r
作者: Batcher 时间: 2024-5-30 08:23
回复 4# lforl
abc.txt如果在zip里面有多个怎么办?
作者: lforl 时间: 2024-5-30 09:10
回复 5# Five66
多谢大佬指点。学会了。
我小结一下,以便于后来人。
REM 注释:7z e 从压缩档案中释放文件到当前目录中。或者到指定的输出文件夹(如 -o c:\Doc)。
REM 注释:7z x 在当前目录中,使用完整路径从压缩档案中释放文件.或者到指定的输出文件夹。
REM 注释:-r 表示递归子目录,遍历所有文件夹和文件
回大版 @Batcher:因为此大包是我打包的,比较确定是没有重复文件,追求效率。如果的确默认7z保持原来文件路径是比较好的方法。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |