Sign in to follow this  
Followers 0
sww

Multiple FileInstall() Code Creator

6 posts in this topic

#1 ·  Posted (edited)

v1.2 NEW RELEASE - If you have v1.0 or v1.1, please replace it with this

---------------------------------------------------------------------------------------------------------

I put this together to save me some time and thought it might be of use to some other people. I haven't gone through it with a fine tooth comb, so any improvement comments would be welcome.

Basically you give it a source directory, select whether or not you want it to include all files within subfolders. It then give you all the code you need to copy and paste it into a script.

Stuart

Opt("TrayIconDebug", 1)         ;0=no info, 1=debug line info
Opt("TrayIconHide", 0)          ;0=show, 1=hide tray icon
Opt("MustDeclareVars", 1)       ;0=no, 1=require pre-declare

Global $PROGRAM_NAME = "Multiple FileInstall() creator"

CREATE_LIST()

Func CREATE_LIST()
    
    Local $SOURCE_FOLDER = ""
    Local $DESTINATION_FOLDER = ""
    Local $SUB
    Local $FLAG
    Local $SOURCE_LOCATION = ""
    Local $DESTINATION_LOCATION = ""
    Local $CODE = ""
    Local $CODE_FILENAME = _SWWUniqueFilename(@TempDir, ".txt")
    
    ;--- Source Folder -------------------------------------------------------------------------------------------
    
    ;Prompt for the source directory
    $SOURCE_FOLDER = FileSelectFolder("Please select your source directory", "")
    
    ;Exit if FileSelectFolder is cancelled
    If $SOURCE_FOLDER = "" Then Exit
    
    ;If the source folder doesn't have a trailing "\" then add a "\"
    If StringRight($SOURCE_FOLDER, 1) <> "\" Then $SOURCE_FOLDER = $SOURCE_FOLDER & "\"
    ;-------------------------------------------------------------------------------------------------------------

    ;--- Destination Folder --------------------------------------------------------------------------------------
    
    ;Prompt for the destination directory
    $DESTINATION_FOLDER = InputBox($PROGRAM_NAME, "Please complete the destination path (e.g. C:\temp\new_location)")
    
    ;Exit if the above InputBox is cancelled or left blank
    If $DESTINATION_FOLDER = "" Then Exit

    ;If the destination folder doesn't have a trailing "\" then add a "\"
    If StringRight($DESTINATION_FOLDER, 1) <> "\" Then $DESTINATION_FOLDER = $DESTINATION_FOLDER & "\"
    ;-------------------------------------------------------------------------------------------------------------

    ;--- Set the value of $SUB so that it can be used as a switch in the dir command -----------------------------
    
    If MsgBox(262144+32+4, $PROGRAM_NAME, "Would you like all sub-directories to be included?") = 6 Then
        $SUB = " /s"
    Else
        $SUB = ""
    EndIf
    ;-------------------------------------------------------------------------------------------------------------
    
    ;--- Set the value of $FLAG that is used in the FileInstall code ---------------------------------------------
    
    If MsgBox(262144+32+4, $PROGRAM_NAME, "In the FileInstall code, do you want the 'overwrite existing files' flag on?") = 6 Then
        $FLAG = 1
    Else
        $FLAG = 0
    EndIf
    ;-------------------------------------------------------------------------------------------------------------
    
    ;Get a file structure report and pipe it to a temporary file
    RunWait(@ComSpec & ' /c dir "' & $SOURCE_FOLDER & '" /b' & $SUB & " > " & @TempDir & "\dirdump.txt", "", @SW_HIDE)
    
    Local $X = 0
    
    While 1
        
        $X = $X + 1
        $SOURCE_LOCATION = FileReadLine(@TempDir & "\dirdump.txt", $X)
        If @error <> 0 Then ExitLoop
            
        ;When the dir command is run without the subdirectory (/s) switch, the full path isn't outputed, therefore:
        If $SUB <> " /s" Then $SOURCE_LOCATION = $SOURCE_FOLDER & $SOURCE_LOCATION
        
        ;If the path entry is a directory then:
        If StringInStr(FileGetAttrib($SOURCE_LOCATION), "D") > 0 Then
            ContinueLoop
        Else
            
            $DESTINATION_LOCATION = $DESTINATION_FOLDER & StringReplace($SOURCE_LOCATION, $SOURCE_FOLDER, "")
                
            $CODE = $CODE & 'FileInstall("' & $SOURCE_LOCATION & '", "' & $DESTINATION_LOCATION & '", ' & $FLAG & ")" & @CRLF
            
        EndIf
    
    WEnd

    FileDelete(@TempDir & "\dirdump.txt")
    
    FileWrite(@TempDir & "\" & $CODE_FILENAME, $CODE)

    Run("C:\WINDOWS\system32\notepad.exe " & @TempDir & "\" & $CODE_FILENAME)
    
EndFunc

Func _SWWUniqueFilename($LOCATION, $EXTENSION)
    
    Local $UNIQUE_FILENAME
    
    ;Ensure that there is a trailing "\" on the end of the path
    If StringRight($LOCATION, 1) <> "\" Then $LOCATION = $LOCATION & "\"
    
    ;Ensure that there is a leading "." at the start of the extension
    If StringLeft($EXTENSION, 1) <> "." Then $EXTENSION = "." & $EXTENSION
    
    ;If the extension isn't valid return @error 1
    If StringLen($EXTENSION) <> 4 Then
        SetError(1)
        Return
    EndIf
        
    While 1
        ;Create a filename using a random number between 10000000 and 99999999
        $UNIQUE_FILENAME = Random(10000000, 99999999, 1) & $EXTENSION
        
        ;If the random filename isn't unique, the loop again, otherwise, exit the loop
        If FileExists($LOCATION & $UNIQUE_FILENAME) = 1 Then
            ContinueLoop
        Else
            Return $UNIQUE_FILENAME
        EndIf
        
    WEnd

EndFunc

fileinstall_code_creator_v1.2.au3

Edited by sww

Share this post


Link to post
Share on other sites



Your Install app is really :D awesome.

Thanks for sharing.

Share this post


Link to post
Share on other sites

Thanks, glad you liked it.

Stuart

Share this post


Link to post
Share on other sites

this is quite handy..

Share this post


Link to post
Share on other sites

The idea is very nice indeed, one suggestion though: instead of letting the user type in the destination, examine FileSelectFolder :D

Think I'll be using this sometimes!

Alzo


Don't take my pic to serious...~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~You Looked, but you did not see!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Share this post


Link to post
Share on other sites

Thanks for the comments.

marfdaman: The reason I'm not using FileSelectFolder is because the folder doesn't always exist in the way that I use the app.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0