yanshengjiang 发表于 2025-10-20 22:18:51

转载:直接解压ZIP文件

本帖最后由 yanshengjiang 于 2025-10-20 22:20 编辑

https://www.theswamp.org/index.php?topic=58631.0

(Defun EXTRACTZIP (ZIP DIR DEL / FSO SRC TAR)
(and (null DIR)
       (setq DIR (vl-filename-mktemp))
       (vl-mkdir DIR)
)
(and (findfile ZIP)
       (vl-file-directory-p DIR)
       (setq FSO (vlax-create-object "Shell.Application")
             TAR (vlax-invoke-method FSO "NameSpace" DIR)
       )
       (setq SRC (vlax-invoke-method FSO "NameSpace" ZIP)
             SRC (vlax-invoke SRC "Items")
       )
       (vlax-invoke-method TAR "CopyHere" SRC 20)
)
(and DEL (vl-file-delete ZIP))
(and FSO (vlax-release-object FSO))
)



kozmosovia 发表于 2025-10-21 16:45:46

rar不是windows内置支持的压缩格式,必须用7z或者inwrar等软件解压。

yanshengjiang 发表于 2025-10-20 22:28:42

AI给了一段解压带密码的居然成功了不敢相信

(Defun EXTRACTZIP (ZIP DIR DEL PASSWD / cmd ret)
;; 处理和准备目录(这部分逻辑与原代码相同)
(and (null DIR)
       (setq DIR (vl-filename-mktemp))
       (vl-mkdir DIR)
)
;; 核心:构建并执行命令行
(if (and (findfile ZIP) (vl-file-directory-p DIR))
    (progn
      ;; 构建7z命令字符串
      (setq cmd (strcat "7z x \""
                        (findfile ZIP); 确保使用完整路径
                        "\" -p" PASSWD; -p 参数指定密码
                        " -o\"" DIR "\" -y"; -o 指定输出目录,-y 表示全部同意
             )
      )
      ;; 执行命令。返回值ret为0通常表示成功
      (setq ret (vlax-invoke-method (vlax-create-object "WScript.Shell") "Run" cmd 0 :vlax-true))
      
      (if (= ret 0)
      (princ (strcat "\n解压成功!文件位于: " DIR))
      (princ "\n解压失败!请检查密码是否正确,或ZIP文件是否损坏。")
      )
      ;; 根据DEL参数决定是否删除原ZIP文件
      (and DEL (vl-file-delete ZIP))
    )
    (princ "\n错误:未找到ZIP文件或目标目录无效。")
)
(princ) ; 静默退出
)
​使用此方法前的准备工作:​​

​安装7-Zip​:确保您的计算机上安装了7-Zip。

​确认命令可用​:在Windows的命令提示符(CMD)中直接输入7z,如果能看到帮助信息,说明可以直接调用。如果不行,可能需要提供7z.exe的完整路径(例如"C:\\Program Files\\7-Zip\\7z.exe")来替换上面命令中的7z。

改进后,您可以这样调用函数(假设密码为mypassword):

autolisp
复制
(EXTRACTZIP "C:\\example.zip" "D:\\output" nil "mypassword")

Bao_lai 发表于 2025-10-20 22:39:48

很好,反过来压缩文件可好?

yanshengjiang 发表于 2025-10-20 22:45:42

Bao_lai 发表于 2025-10-20 22:39
很好,反过来压缩文件可好?

诚然,deepseek一遍过

(defun ZIPFOLDER-7Z (sourceFolder targetZip / cmd ret)
;; 构建7z命令字符串。注意:请根据您电脑上7z的实际路径调整
(setq cmd (strcat
            "7z a -tzip \""   ; a: 添加文件到压缩包 -tzip: 指定为zip格式
            targetZip
            "\" \""
            sourceFolder
            "\\*\" -r"         ; 压缩源文件夹下的所有内容(-r表示递归子目录)
            )
)
;; 执行命令
(setq ret (vlax-invoke-method (vlax-create-object "WScript.Shell") "Run" cmd 0 :vlax-true))
(if (= ret 0)
    (princ (strcat "\n使用7z压缩成功!文件位于: " targetZip))
    (princ "\n压缩失败,请检查7z是否安装或命令是否正确。")
)
(princ)
)


(ZIPFOLDER-7Z "C:\\标准DLTB转CASS模板_FME工具(yan修改)2024-07-15" "D:\\MyProject.zip")

yanshengjiang 发表于 2025-10-20 23:21:38

有没有,未安装7z的试试

使用此方法前,请确保您的计算机上已安装了 7-Zip软件,并且其命令行工具 7z.exe的路径已添加到系统的环境变量PATH中。如果没有,需要在命令中指定完整路径,例如:

"C:\\Program Files\\7-Zip\\7z.exe" a ...。

guosheyang 发表于 2025-10-21 16:31:03

rar文件好像不能解压呢即使后缀改为zip也不行

guosheyang 发表于 2025-10-21 16:54:35

kozmosovia 发表于 2025-10-21 16:45
rar不是windows内置支持的压缩格式,必须用7z或者inwrar等软件解压。

好的谢谢!

cren1128 发表于 2025-10-28 16:56:21

跑过来瞅瞅

sandyvs 发表于 7 天前

guosheyang 发表于 2025-10-21 16:54
好的谢谢!

win11从某个版本可以解压7z、rar等格式了,不清楚从哪个版本开始的
页: [1]
查看完整版本: 转载:直接解压ZIP文件