Jump to content
Sign in to follow this  
kjcdude

Compare Directories, Delete Files That Shouldn't Exist

Recommended Posts

kjcdude

I need to be able to compare two directories, or compare one directory to a static ini file, then delete all the files that shouldn't exist compared to the master directory.

Below is what i have now, it's not working as it should. I'm very new to arrays which is what i believe is messing me up.

FileChangeDir("C:\Program Files\system\core\")
$search = FileFindFirstFile("*.ext")
$dtmodified = @mon & "/" & @mday & "/" & @YEAR & " - " & @hour & ":" & @min & ":" & @sec
$compnum = StringRight(@ComputerName, 3)
$logini = "\\nas01\Volume_1\Update System\Log\11-24-07 - " & $compnum & ".ini"
$appslist = "\\nas01\Volume_1\Update System\Updates\apps-ext.ini"
$appsini = IniReadSection($steamappslist, "EXT_EXISTS")
IniWrite($logini, "Modified", "When", $dtmodified)

while 1
    $searchfake = FileFindFirstFile("*.ext")
    For $i = 1 To $appsini[0][0]
    $finder = FileFindNextFile($search)
    If @error Then ExitLoop
        if $finder = $appsini[$i][1] Then
            Else
            IniWrite($logini, "EXT_DEL", $searchfake, $finder)
    EndIf
    Next
WEnd

$del = IniReadSection($logini, "EXT_DEL")
For $i = 1 To $del[0][0]
FileDelete("C:\Program Files\system\core\" & $del[$i][1])
Next
Edited by kjcdude

Share this post


Link to post
Share on other sites
smashly

Hi, seems easy enough, here's an example reading an ini with file names to keep and looking in a directory to compare against the ini, if the directory has files that aren't in the ini then they are deleted.

#include <File.au3>

DelViaIni(@ScriptDir & "\Compare.ini", "Compare", "C:\Test")

; Parameters for DelViaIni() function;
; $IniPath = Path to ini that contains the file names to keep
; $sName = Section name in the ini to read
; $cPath = The Directory to compare and delete files from.
Func DelViaIni($IniPath, $sName, $cPath)
    Local $IRS, $FL2A
    $IRS = IniReadSection($IniPath, $sName)
    If @error <> 1 Then
        $FL2A = _FileListToArray($cPath, "*", 1)
        If @error = 0 Then
            For $i = 1 To $FL2A[0]
                If $FL2A[$i] <> Check($FL2A[$i], $IRS) Then FileDelete($cPath & "\" & $FL2A[$i])
            Next
        EndIf
    EndIf
EndFunc

;Helper function
Func Check($iFile, $aIRS)
    For $j = 1 To $aIRS[0][0]
        If $ifile = $aIRS[$j][1] Then Return $ifile
    Next
    Return ""
EndFunc

Here's what I used for an ini

[Compare]
File1=New AutoIt v3 Script.au3
File2=New AviSynth Script.avs
File3=New Text document.txt

As you can see I created a directory C:\Test , I then added some dummy files into the directory, I ran the script with the ini in another directory...

I think it would be fairly easy to do the same thing via a main directory and another directory compare/delete without using an ini.

Cheers

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  

×