[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 【已解决】VBS如何根据文件数量解压?

本帖最后由 zhanglei1371 于 2014-7-19 13:47 编辑

如果想做到:拖动多个rar压缩文件到vbs后,如果是有多个文件,则解压到文件夹,若有文件夹或只有一个文件,则直接解压?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# Batcher


    当然安装了。
系统rar右键当然可以解压缩。不过我需要的是职能判断,压缩包根目录只有一个文件或文件夹就直接解压,否则就解压到文件夹。更加方便了。
最终目的是建立系统快捷键如alt+R,选中文件后一按,不用点右键,就自动解压了。
版主该明白我的意思吧???

TOP

回复 4# yu2n


    大侠,你理解错了,nfiles是选中的总数,我不是根据nfiles来判断的。
而是:当选中10个rar压缩包时,当其中有6个不是以文件夹的形式压缩时,在解压时就自动创建文件夹,然后解压到文件夹中,否则如果是以文件夹的形式压缩的,就直接解压了。
我的目的是:解压后不出现很多杂乱文件的情况。如果右键-rar-解压到目录的话,可能会出现两层目录,每次都是先双击打开看看是否以文件夹压缩的,然后再判断直接解压还是解压到目录。
看你的代码就差一步了,能否继续完善下,谢谢。
另外,我的最终目的是:左键选中压缩文件——直接按快捷键alt+R即执行解压缩,你如果会ahk的话,或者有其他的方法难能实现我这个最终目的,那就真是太好了!

TOP

回复 8# czjt1234


    准备学习AHK,用Ahk来实现这个功能。一切为了方便!

TOP

回复 10# yu2n


    非常感谢yu2n的热心关注!
不是您语文不好,是问题不容易表述清楚。代码我试了下,对于多个文件的可以自动建立目录,但是如果多个文件在文件夹里还会多建立,为此,我做了几个压缩包,第一二个要求建立文件夹后解压,第三个第四个要求直接解压
回复 10# yu2n

TOP

转载:

/* ver=1.1
;~~~~~~~~~~~~~~~~~~~~万年书妖~~~~~~~~~~~~~~~~~~~~
1、如果压缩版内只有一个文件,则是否覆盖,交给7z提问处理
2、如果有且仅有一个文件夹,解压缩;若已有同名文件夹,则新建“包内文件夹名+加后缀”的文件夹处理
3、如果有多个,以包文件夹解压缩;若已有同名文件夹,则新建“包文件名+加后缀”的文件夹处理
;~~~~~~~~~~~~~~~~~~~~万年书妖~~~~~~~~~~~~~~~~~~~~
*/

#NoTrayIcon
#NoEnv
#SingleInstance Ignore
SetWorkingDir,%A_ScriptDir%
candyselected=%1%

;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
; 若灌入脚本,配合candy使用,删除上面的行即可
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
cando_智能解压:
        SmartUnZip_首层多个文件标志:=0
        SmartUnZip_首层有文件夹标志:=0
        SmartUnZip_首层文件夹名:=
        SmartUnZip_文件夹名A:=
        SmartUnZip_文件夹名B:=

        包列表=%A_Temp%\wannianshuyaozhinengjieya_%A_Now%.txt
        程序路径_7Z=Z:\Kini\File\Zip\7z\7z.exe
        程序路径_7ZG=Z:\Kini\File\Zip\7z\7zg.exe

        SplitPath ,candyselected,,包目录,,包文件名
        RunWait, %comspec% /c %程序路径_7Z% l "%candyselected%" `>"%包列表%",,hide


;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

        loop,read,%包列表%
        {
                If(RegExMatch(A_LoopReadLine,"^(\d\d\d\d-\d\d-\d\d)"))
                {
                        If( InStr(A_loopreadline,"D")=21 Or InStr(A_loopreadline,"\"))  ;本行如果包含\或者有D标志,则判定为文件夹
                        {
                                SmartUnZip_首层有文件夹标志=1
                        }

                        If InStr(A_loopreadline,"\")
                                StringMid,SmartUnZip_文件夹名A,A_LoopReadLine,54,InStr(A_loopreadline,"\")-54
                        Else
                                StringTrimLeft,SmartUnZip_文件夹名A,A_LoopReadLine,53

                        If((SmartUnZip_文件夹名B != SmartUnZip_文件夹名A ) And ( SmartUnZip_文件夹名B!="" ))
                        {
                                SmartUnZip_首层多个文件标志=1
                                Break
                        }
                        SmartUnZip_文件夹名B:=SmartUnZip_文件夹名A
                }
        }
        FileDelete,%包列表%

;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
        If(SmartUnZip_首层多个文件标志=0 && SmartUnZip_首层有文件夹标志=0 )   ;压缩文件内,首层有且仅有一个文件
        {
                Run, %程序路径_7ZG% x "%candyselected%" -o"%包目录%"    ;覆盖还是改名,交给7z
        }

        Else If(SmartUnZip_首层多个文件标志=0 && SmartUnZip_首层有文件夹标志=1 )   ;压缩文件内,首层有且仅有一个文件夹
        {
                IfExist,%包目录%\%SmartUnZip_文件夹名A%   ;已经存在了以“首层文件夹命名”的文件夹,怎么办?
                {
                        Loop
                        {
                                SmartUnZip_NewFolderName=%包目录%\%SmartUnZip_文件夹名A%( %A_Index% )
                                If !FileExist( SmartUnZip_NewFolderName )
                                {
                                        Run, %程序路径_7ZG% x "%candyselected%"   -o"%SmartUnZip_NewFolderName%"
                                        break
                                }
                        }
                }
                Else  ;没有“首层文件夹命名”的文件夹,那就太好了
                {
                        Run, %程序路径_7ZG% x "%candyselected%" -o"%包目录%"
                }
        }
        Else  ;压缩文件内,首层有多个文件夹
        {
                IfExist %包目录%\%包文件名%  ;已经存在了以“包文件名”的文件夹,怎么办?
                {
                        Loop
                        {
                                SmartUnZip_NewFolderName=%包目录%\%包文件名%( %A_Index% )
                                If !FileExist( SmartUnZip_NewFolderName )
                                {
                                        Run, %程序路径_7ZG% x "%candyselected%"   -o"%SmartUnZip_NewFolderName%"
                                        break
                                }
                        }
                }
                Else ;没有,那就太好了
                {
                        Run, %程序路径_7ZG% x  "%candyselected%" -o"%包目录%\%包文件名%"
                }
        }
        Return

TOP

返回列表