Siryx Posted April 28, 2015 Share Posted April 28, 2015 Hey guys,I have a folder full of ~5000 files and I would like to delete files out of there. I want to delete every file which is there twice or more often (not one left over, all should be gone) and the ones who are there just once should stay. The problem is, they have different names but the exact size is unique. So I thought about deleting the files with same sizes which appear more than once. Can you throw me some keywords to look out for in the helpfile? I'm basically just done with the "Hello World" so, please include basic keywords thank you! Link to comment Share on other sites More sharing options...
BrewManNH Posted April 28, 2015 Share Posted April 28, 2015 FileListToArray and FileGetSize Siryx 1 If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
MikahS Posted April 28, 2015 Share Posted April 28, 2015 (edited) Have a look at: FileGetSizein the helpfile. Edit: to slow Edited April 28, 2015 by MikahS Siryx 1 Snips & Scripts My Snips: graphCPUTemp ~ getENVvarsMy Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4 Feel free to use any of my code for your own use. Forum FAQ Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 (edited) #include <Array.au3> #include <File.au3> #include <MsgBoxConstants.au3> Func Example() ; List all the files and folders in the desktop directory using the default parameters. $aFileList = _FileListToArray("D:\Musik - Kopie","*",) If @error = 1 Then MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.") Exit EndIf If @error = 4 Then MsgBox($MB_SYSTEMMODAL, "", "No file(s) were found.") Exit EndIf EndFunc Func Example1() ; Retrieve the file size (in bytes) of the AutoIt executable. $iFileSize = FileGetSize($aFileList[1]) ; Display the file size and convert to a readable form. MsgBox($MB_SYSTEMMODAL, "", ByteSuffix($iFileSize)) EndFunc ;==>Example Why doesn't this give me the size of the first file of the array? It does nothing, no error etc Edited April 28, 2015 by Siryx Link to comment Share on other sites More sharing options...
jguinch Posted April 28, 2015 Share Posted April 28, 2015 Because you never call your functions.... Add Example() and/or Example1() in your code Siryx 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 (edited) it gives me error at line 71 .. I only have 27.. I have no idea is that caused by the file.au3 file? or did i make a mistake€: comma too muchnow I get variable not declared error;isn't $iFileSize = FileGetSize($aFileList[1]) supposed to be first of the array ? Edited April 28, 2015 by Siryx Link to comment Share on other sites More sharing options...
jguinch Posted April 28, 2015 Share Posted April 28, 2015 (edited) You have a bad syntax here : $aFileList = _FileListToArray("D:\Musik - Kopie","*",) < The comma is the problemYou can try with this kind of code :Local $sPath = "D:\Musik - Kopie" Local $hSearch = FileFindFirstFile($sPath & "\*.*") If $hSearch = -1 Then Exit Local $sSizes = ";" While 1 $sFile = FileFindNextFile($hSearch) If @error Then ExitLoop If @extended Then ContinueLoop $iSize = FileGetSize($sPath & "\" & $sFile) If StringInStr($sSizes, ";" & $iSize & ";") Then FileDelete($sPath & "\" & $sFile) Else $sSizes &= $iSize & ";" EndIf WEnd FileClose($hSearch) Edited April 28, 2015 by jguinch Correcting wrong code Siryx 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 (edited) thank you, I will try to understand €: how doesIf StringInStr($sSizes, $iSize & ";")that work? what does it do? $sSizes is nothing why does it work? Edited April 28, 2015 by Siryx Link to comment Share on other sites More sharing options...
guinness Posted April 28, 2015 Share Posted April 28, 2015 (edited) Remove that trailing comma after "*" and you will see the error disappear. Edited April 28, 2015 by guinness Siryx 1 UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
jguinch Posted April 28, 2015 Share Posted April 28, 2015 The error refers to the included File.au3, which has no problem. The problem is the way you call the _FileListToArray.Did you try to remove the comma ? Siryx 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 yes yes now I get variable not declared error;isn't $iFileSize = FileGetSize($aFileList[1]) supposed to be first of the array ? Link to comment Share on other sites More sharing options...
jguinch Posted April 28, 2015 Share Posted April 28, 2015 $sSizes is nothing until it is set to some concatenate size values (in the Else step)At the beginning, the variable is empty, but each uniq size is added to it, with a ";" as separator.For each file size, I search in this variable if the value <size>; exists.In fact, my code is wrong. To work, $sSizes should be set to ";" at the beginning and the search must operate with ;<filesize>;I edit my code now... Siryx 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 $sSizes is nothing until it is set to some concatenate size values (in the Else step)At the beginning, the variable is empty, but each uniq size is added to it, with a ";" as separator.For each file size, I search in this variable if the value <size>; exists.In fact, my code is wrong. To work, $sSizes should be set to ";" at the beginning and the search must operate with ;<filesize>;I edit my code now...okay I tried it and it leaves one file behind.. but I think I understood so far Link to comment Share on other sites More sharing options...
jguinch Posted April 28, 2015 Share Posted April 28, 2015 $aFileList[1] is supposed to be the first file.But I see in your code that the $aFileList is not declared as a global variable. Try to declare it before calling the function :Global $aFileList Siryx 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 (edited) $aFileList[1] is supposed to be the first file.But I see in your code that the $aFileList is not declared as a global variable. Try to declare it before calling the function :Global $aFileListoh now I understand what Local and Global are for!it gives me 0 .. damn Edited April 28, 2015 by Siryx Link to comment Share on other sites More sharing options...
jguinch Posted April 28, 2015 Share Posted April 28, 2015 (edited) Please, post your code. We cannot help you if we don't see what you do... Edited April 28, 2015 by jguinch Siryx 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 (edited) #include <File.au3> #include <Array.au3> #include <MsgBoxConstants.au3> Global $aFileList Global $iFileSize Listing() Func Listing() ; List all the files and folders in the desktop directory using the default parameters. $aFileList = _FileListToArray("D:\Musik - Kopie") If @error = 1 Then ;Kills when directory doesnt exist MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.") Exit EndIf If @error = 4 Then ;Kills when folder is empty MsgBox($MB_SYSTEMMODAL, "", "No file(s) were found.") Exit EndIf EndFunc Retrieving() Func Retrieving() ; Retrieve the file size of $aFileList $iFileSize = FileGetSize($aFileList[1]) ; Display the file size MsgBox($MB_SYSTEMMODAL, "",$iFileSize) EndFunc _ArrayDisplay($aFileList)this is it im just playing around and trying to understand arrays... I'm also trying to understand what you need to do to your code, what effect the ; haswhen i want to make a loop, how can i change the 1 in $aFileList[1] Edited April 28, 2015 by Siryx Link to comment Share on other sites More sharing options...
jguinch Posted April 28, 2015 Share Posted April 28, 2015 In your case, FileGetSize($aFileList[1]) returns 0 because only the filenames are returned in your _FileListToArray call.You have to work with the full name to use FileGetSize, either by using True in the $bReturnPath parameter of _FileListToArray, or use something like FileGetSize("D:\Musik - Kopie\" & $aFileList[1]) Siryx 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 Local $sPath = "D:\Musik - Kopie2" ;searchpath Local $hSearch = FileFindFirstFile($sPath & "\*.*") ;starts the searching and gives out name of the file If $hSearch = -1 Then Exit ;no files kills scripts - rip Local $sSizes ;defining of variable While 1 ;starts the loop to search for files $sFile = FileFindNextFile($hSearch) ;variable with filename If @error Then ExitLoop ;kills when no files If @extended Then ContinueLoop ;goes on when found $iSize = FileGetSize($sPath & "\" & $sFile) ;gets the size from the file with the data from line 8 If StringInStr($sSizes, $iSize & ";") Then ; FileDelete($sPath & "\" & $sFile) ;deletes file when sizes are the same Else $sSizes &= $iSize & ";" ;if not the same then sizes is the first size and ; behind it EndIf ;if now sizes and size are the same stringinstr will trigger and delete 2nd file WEnd FileClose($hSearch)this is how far I understood your script, I think I'll try to do something like this because I don't understand arrays.. Link to comment Share on other sites More sharing options...
Siryx Posted April 28, 2015 Author Share Posted April 28, 2015 (edited) In your case, FileGetSize($aFileList[1]) returns 0 because only the filenames are returned in your _FileListToArray call.You have to work with the full name to use FileGetSize, either by using True in the $bReturnPath parameter of _FileListToArray, or use something like FileGetSize("D:\Musik - Kopie\" & $aFileList[1])#include <File.au3> #include <Array.au3> #include <MsgBoxConstants.au3> Global $aFileList Global $iFileSize Listing() Func Listing() ; List all the files and folders in the desktop directory using the default parameters. $aFileList = _FileListToArray("D:\Musik - Kopie","*",1,True) If @error = 1 Then ;Kills when directory doesnt exist MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.") Exit EndIf If @error = 4 Then ;Kills when folder is empty MsgBox($MB_SYSTEMMODAL, "", "No file(s) were found.") Exit EndIf EndFunc Retrieving() Func Retrieving() ; Retrieve the file size of $aFileList $iFileSize = FileGetSize($aFileList[1]) ; Display the file size MsgBox($MB_SYSTEMMODAL, "",$iFileSize) EndFunc _ArrayDisplay($aFileList)works! atleast it gives me the bytes so thats step one.. but would you mind explaining me how you would change the code you wrote? with the ";", I didn't quite understood$sSizes is nothing until it is set to some concatenate size values (in the Else step)At the beginning, the variable is empty, but each uniq size is added to it, with a ";" as separator.For each file size, I search in this variable if the value <size>; exists.In fact, my code is wrong. To work, $sSizes should be set to ";" at the beginning and the search must operate with ;<filesize>;I edit my code now...I tried your code out and it deleted everything I wanted but one of the files (when there where 2 / 3 / n it left one behind ) Edited April 28, 2015 by Siryx Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now