找回密码
 加入
搜索
查看: 4782|回复: 11

[AU3基础] AU3不知能不能打包文件夹的?(已解决)

  [复制链接]
发表于 2011-1-21 20:05:52 | 显示全部楼层 |阅读模式
本帖最后由 mo_shaojie 于 2011-4-15 10:00 编辑

如题,文件知道用filesinstall能打包进去EXE里.但是不知能不能把文件夹也打包进去再释放出来的呢?
发表于 2011-1-21 20:14:11 | 显示全部楼层
可以,转别人的,DirInstall_pl.au3搜索一下
#include-once
#include <File.au3>
#include "DirInstall_pl.au3"
#OnAutoItStartRegister "qkpl" ;注册 AutoIt 启动时调用的函数ok,必须为双引号 ;编译后不会启动AutoIt也就不会执行
;==========================================================================================
; 说明: 包含并装入指定文件夹(可含子文件夹)到编译后的脚本程序中.
; 语法: _DirInstall("源文件夹"[, "目标路径|是否新建根目录"[, 标志[, "释放函数名"]]])
; 参数: "源文件夹" - 需要包含并装入的指定文件夹
;    "目标路径|是否新建根目录" - [可选] 目标文件夹。目标路径:默认为 '@TempDir'。注:外面
;    必须带一对引号(包括宏)。是否新建根目录:1 = 新建同源文件夹名目录(默认);0 = 不新建。
;    标志 - [可选] 1 = 覆盖已存在的文件。0 = 不覆盖已存在的文件(默认)
;    释放函数名 - [可选] 如果需要在触发时才释放文件(比如点击控件),则需填入一个对应此打包
;    文件夹唯一的函数名(此函数名不能与脚本内的任一函数名重名,打包文件夹不同函数名也不同)
; 注意: DirInstall_pl.au3 为跟随此udf必须的文件,不能删除,否则会出错。
;    为使 DirInstall_pl.au3 生成正确的打包脚本,编译exe之前需至少先运行一次脚本,如果需要
;    在触发时才释放文件还需先触发一次(只触发一次即可,第二次会提示重名),触发后并不会复制
;    到目标路径,此功能在编译后才会生效。
; 作者: Afan -- http://www.autoitx.com
;=========================================================================================
Func _DirInstall($Dirl, $mbDir = '@TempDir|1', $fg = 0, $cf = '') 
        If @Compiled = 1 Then 
                If $cf <> '' Then 
                        Call($cf) 
                EndIf
                Return
        EndIf
        Global $sfdir 
        Dim $fgqz 
        $fgqz = StringSplit($mbDir, '|')
        If @error = 1 Then 
                If $mbDir = '' Then 
                        $mbDir = '@TempDir'
                        $sfdir = 1
                ElseIf $mbDir <> '' Then
                        $mbDir = $mbDir
                        $sfdir = 1
                EndIf
        Else 
                If $fgqz[1] = '' Then $mbDir = '@TempDir' 
                If $fgqz[1] <> '' Then $mbDir = $fgqz[1] 
                If $fgqz[2] = '' Then $sfdir = 1 
                If $fgqz[2] <> '' Then $sfdir = $fgqz[2] 
        EndIf
        If $fg = '' Then $fg = 0 
        Global $scDir = StringRegExp($Dirl, "(.*)\\.+\\?", 3) 
        If @error <> 0 Then 
                $scDir = @ScriptDir
        Else 
                $scDir = $scDir[0]
        EndIf
        If StringRegExp($Dirl, "\\$", 0) = 1 Then $Dirl = StringTrimRight($Dirl, 1) 
        Global $atmp = @ScriptDir & "\DirInstall_pl.au3" 
        If $cf <> '' Then 
                If StringRegExp($cf, '^(\d|\w|_)+$', 0) = 0 Then
                        MsgBox(0, '错误', '该参数 "' & $cf & '" 包含非法字符,请返回修改 ')
                        Return
                ElseIf StringInStr(FileRead('DirInstall_pl.au3'), 'Func ' & $cf & '()') <> 0 Then
                        MsgBox(0, '问题?', '该参数 "' & $cf & '" 已使用过,如所打包的内容不同请返回修改 ')
                        Return
                EndIf
                FileWriteLine($atmp, 'Func ' & $cf & '()') 
                Toplau3($Dirl, $mbDir, $fg) 
                FileWriteLine($atmp, 'Endfunc') 
                Return
        EndIf
        Toplau3($Dirl, $mbDir, $fg) 
EndFunc   ;==>_DirInstall

Func Toplau3($Dirl, $mbDir, $fg)
        Dim $xdDir, $scDir, $atmp, $htstr = 'FileInstall("', $sfdir, $xdDirj, $xdDiry
        $search = FileFindFirstFile($Dirl & "\*")
        If $search = -1 Then Return -1
        While 1
                $file = FileFindNextFile($search)
                If @error Then 
                        FileClose($search)
                        Return
                ElseIf $file = "." Or $file = ".." Then
                        ContinueLoop
                ElseIf StringInStr(FileGetAttrib($Dirl & "" & $file), "D") Then
                        Toplau3($Dirl & "" & $file, $mbDir, $fg)
                        ContinueLoop 
                EndIf
                If StringRegExp($Dirl, "\w:.*", 0) = 1 Then 
                        $xdDiry = StringTrimLeft(StringReplace($Dirl, $scDir, ''), 1) 
                        If $sfdir = 1 Then $xdDir = $xdDiry & '\' 
                Else 
                        $xdDiry = StringReplace($Dirl, $scDir, '') 
                        If $sfdir = 1 Then $xdDir = $xdDiry & '\' 
                EndIf
                If $sfdir = 0 Then 
                        $fgxg = StringSplit($xdDiry, '\') 
                        If @error = 1 Then $xdDir = '' 
                        If @error <> 1 Then $xdDir = $fgxg[2] & '\' 
                EndIf
                $xdDirj = StringTrimRight($xdDir, 1) 
                If StringInStr($mbDir, '@') = 0 Then 
                        If IsDeclared("_" & $xdDiry) = 0 Then 
                                If $xdDir = '' Then FileWriteLine($atmp, 'DirCreate("' & $mbDir & '")') 
                                If $xdDir <> '' Then FileWriteLine($atmp, 'DirCreate("' & $mbDir & "" & $xdDirj & '")') 
                                Assign("_" & $xdDiry, 0) 
                        EndIf 
                        FileWriteLine($atmp, $htstr & $Dirl & "" & $file & '", ' & '"' & $mbDir & "" & $xdDir & $file & '", ' & $fg & ")")
                Else
                        If IsDeclared("_" & $xdDiry) = 0 Then
                                If $xdDir = '' Then FileWriteLine($atmp, 'DirCreate( ' & $mbDir & ')')
                                If $xdDir <> '' Then FileWriteLine($atmp, 'DirCreate( ' & $mbDir & ' & "\' & $xdDirj & '")')
                                Assign("_" & $xdDiry, 0)
                        EndIf
                        FileWriteLine($atmp, $htstr & $Dirl & "" & $file & '", ' & $mbDir & ' & "\' & $xdDir & $file & '", ' & $fg & ")")
                EndIf
        WEnd
EndFunc   ;==>Toplau3

Func qkpl()
        Local $atmp = @ScriptDir & "\DirInstall_pl.au3"
        Local $fO = FileOpen($atmp, 2)
        FileClose($fO)
EndFunc   ;==>qkpl
发表于 2011-1-21 20:14:16 | 显示全部楼层
可以,转别人的,DirInstall_pl.au3搜索一下
#include-once
#include <File.au3>
#include "DirInstall_pl.au3"
#OnAutoItStartRegister "qkpl" ;注册 AutoIt 启动时调用的函数ok,必须为双引号 ;编译后不会启动AutoIt也就不会执行
;==========================================================================================
; 说明: 包含并装入指定文件夹(可含子文件夹)到编译后的脚本程序中.
; 语法: _DirInstall("源文件夹"[, "目标路径|是否新建根目录"[, 标志[, "释放函数名"]]])
; 参数: "源文件夹" - 需要包含并装入的指定文件夹
;    "目标路径|是否新建根目录" - [可选] 目标文件夹。目标路径:默认为 '@TempDir'。注:外面
;    必须带一对引号(包括宏)。是否新建根目录:1 = 新建同源文件夹名目录(默认);0 = 不新建。
;    标志 - [可选] 1 = 覆盖已存在的文件。0 = 不覆盖已存在的文件(默认)
;    释放函数名 - [可选] 如果需要在触发时才释放文件(比如点击控件),则需填入一个对应此打包
;    文件夹唯一的函数名(此函数名不能与脚本内的任一函数名重名,打包文件夹不同函数名也不同)
; 注意: DirInstall_pl.au3 为跟随此udf必须的文件,不能删除,否则会出错。
;    为使 DirInstall_pl.au3 生成正确的打包脚本,编译exe之前需至少先运行一次脚本,如果需要
;    在触发时才释放文件还需先触发一次(只触发一次即可,第二次会提示重名),触发后并不会复制
;    到目标路径,此功能在编译后才会生效。
; 作者: Afan -- http://www.autoitx.com
;=========================================================================================
Func _DirInstall($Dirl, $mbDir = '@TempDir|1', $fg = 0, $cf = '') 
        If @Compiled = 1 Then 
                If $cf <> '' Then 
                        Call($cf) 
                EndIf
                Return
        EndIf
        Global $sfdir 
        Dim $fgqz 
        $fgqz = StringSplit($mbDir, '|')
        If @error = 1 Then 
                If $mbDir = '' Then 
                        $mbDir = '@TempDir'
                        $sfdir = 1
                ElseIf $mbDir <> '' Then
                        $mbDir = $mbDir
                        $sfdir = 1
                EndIf
        Else 
                If $fgqz[1] = '' Then $mbDir = '@TempDir' 
                If $fgqz[1] <> '' Then $mbDir = $fgqz[1] 
                If $fgqz[2] = '' Then $sfdir = 1 
                If $fgqz[2] <> '' Then $sfdir = $fgqz[2] 
        EndIf
        If $fg = '' Then $fg = 0 
        Global $scDir = StringRegExp($Dirl, "(.*)\\.+\\?", 3) 
        If @error <> 0 Then 
                $scDir = @ScriptDir
        Else 
                $scDir = $scDir[0]
        EndIf
        If StringRegExp($Dirl, "\\$", 0) = 1 Then $Dirl = StringTrimRight($Dirl, 1) 
        Global $atmp = @ScriptDir & "\DirInstall_pl.au3" 
        If $cf <> '' Then 
                If StringRegExp($cf, '^(\d|\w|_)+$', 0) = 0 Then
                        MsgBox(0, '错误', '该参数 "' & $cf & '" 包含非法字符,请返回修改 ')
                        Return
                ElseIf StringInStr(FileRead('DirInstall_pl.au3'), 'Func ' & $cf & '()') <> 0 Then
                        MsgBox(0, '问题?', '该参数 "' & $cf & '" 已使用过,如所打包的内容不同请返回修改 ')
                        Return
                EndIf
                FileWriteLine($atmp, 'Func ' & $cf & '()') 
                Toplau3($Dirl, $mbDir, $fg) 
                FileWriteLine($atmp, 'Endfunc') 
                Return
        EndIf
        Toplau3($Dirl, $mbDir, $fg) 
EndFunc   ;==>_DirInstall

Func Toplau3($Dirl, $mbDir, $fg)
        Dim $xdDir, $scDir, $atmp, $htstr = 'FileInstall("', $sfdir, $xdDirj, $xdDiry
        $search = FileFindFirstFile($Dirl & "\*")
        If $search = -1 Then Return -1
        While 1
                $file = FileFindNextFile($search)
                If @error Then 
                        FileClose($search)
                        Return
                ElseIf $file = "." Or $file = ".." Then
                        ContinueLoop
                ElseIf StringInStr(FileGetAttrib($Dirl & "" & $file), "D") Then
                        Toplau3($Dirl & "" & $file, $mbDir, $fg)
                        ContinueLoop 
                EndIf
                If StringRegExp($Dirl, "\w:.*", 0) = 1 Then 
                        $xdDiry = StringTrimLeft(StringReplace($Dirl, $scDir, ''), 1) 
                        If $sfdir = 1 Then $xdDir = $xdDiry & '\' 
                Else 
                        $xdDiry = StringReplace($Dirl, $scDir, '') 
                        If $sfdir = 1 Then $xdDir = $xdDiry & '\' 
                EndIf
                If $sfdir = 0 Then 
                        $fgxg = StringSplit($xdDiry, '\') 
                        If @error = 1 Then $xdDir = '' 
                        If @error <> 1 Then $xdDir = $fgxg[2] & '\' 
                EndIf
                $xdDirj = StringTrimRight($xdDir, 1) 
                If StringInStr($mbDir, '@') = 0 Then 
                        If IsDeclared("_" & $xdDiry) = 0 Then 
                                If $xdDir = '' Then FileWriteLine($atmp, 'DirCreate("' & $mbDir & '")') 
                                If $xdDir <> '' Then FileWriteLine($atmp, 'DirCreate("' & $mbDir & "" & $xdDirj & '")') 
                                Assign("_" & $xdDiry, 0) 
                        EndIf 
                        FileWriteLine($atmp, $htstr & $Dirl & "" & $file & '", ' & '"' & $mbDir & "" & $xdDir & $file & '", ' & $fg & ")")
                Else
                        If IsDeclared("_" & $xdDiry) = 0 Then
                                If $xdDir = '' Then FileWriteLine($atmp, 'DirCreate( ' & $mbDir & ')')
                                If $xdDir <> '' Then FileWriteLine($atmp, 'DirCreate( ' & $mbDir & ' & "\' & $xdDirj & '")')
                                Assign("_" & $xdDiry, 0)
                        EndIf
                        FileWriteLine($atmp, $htstr & $Dirl & "" & $file & '", ' & $mbDir & ' & "\' & $xdDir & $file & '", ' & $fg & ")")
                EndIf
        WEnd
EndFunc   ;==>Toplau3

Func qkpl()
        Local $atmp = @ScriptDir & "\DirInstall_pl.au3"
        Local $fO = FileOpen($atmp, 2)
        FileClose($fO)
EndFunc   ;==>qkpl
发表于 2011-1-21 20:15:11 | 显示全部楼层
在UDF区内,搜一下就可以找到原帖!
发表于 2011-1-21 20:15:14 | 显示全部楼层
在UDF区内,搜一下就可以找到原帖!
发表于 2011-1-21 20:15:16 | 显示全部楼层
在UDF区内,搜一下就可以找到原帖!
发表于 2011-1-21 20:16:29 | 显示全部楼层
我晕!网速这么慢,居然重复了N次,我真的不是故意的哟
 楼主| 发表于 2011-1-21 22:08:53 | 显示全部楼层
哈,竟然被你刷了这么多分.高手哦.
多谢了,试下.
发表于 2011-11-19 19:56:16 | 显示全部楼层
真有吗?我找找去
发表于 2013-6-24 12:02:14 | 显示全部楼层
感谢分享 谢谢
发表于 2016-4-14 07:54:34 | 显示全部楼层
正需要这个文件。
发表于 2016-4-14 09:08:45 | 显示全部楼层
可以,转别人的,DirInstall_pl.au3搜索一下
gzh888666 发表于 2011-1-21 20:14


正需要 感謝分享嚕
pcmacgyver
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-2 04:40 , Processed in 0.078126 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表