Jump to content

_FileGetProperty - Retrieves the properties of a file


Recommended Posts

This is a modification of a script that was originally posted back in 2006, that was itself a modification of a script in the same thread, which was a modification of another script linked in that thread. All credits remain in the header as to who contributed to this.

The only credit I take in this script is modifying parts of it to:

1.make it a bit faster, by removing a ReDim that was inside a loop

2.add support for OSs other than XP because of the number of file properties returned

3.add support for the future if the number of file properties returned changes again with future versions of Windows

Please take note, this script will only work if you know the name of the property you're trying to retrieve. These properties are dependent upon the OS version, the OS language, and the file's properties. This function does not take any of these things into account, if you want to use this and make it OS neutral, you'll have to do that in your script, because it doesn't get done in here. Fortunately, if you access this function and leave the parameter $FGP_Property blank, it will return an array of all the properties that Windows knows about, and in the language that Windows is running in.

Windows XP only returns 38 properties, Windows 7 returns 288, Windows 8 returns 290. The same properties can have different names depending on which OS you're using this with.

Update Sept. 6, 2017

Changed the code slightly to make sure the return includes all properties, the last update cut off some of the properties at the end, and increased the $iPropertyCount to 500 (from 300) because of Windows 10 file property count increase.

Update: Jun-25-2013

I have tweaked this function again, a small update.

  • Added a new parameter to the function, $iPropertyCount, with a default setting of 300. This parameter was previously hard coded inside the function, now you are able to adjust it to the setting you desire/require. This value is used to determine how many file properties will be searched for the value passed in $FGP_PROPERTY, or the maximum amount of properties that will be returned in the array if $FGP_PROPERTY is a blank string.
  • The $FGP_PROPERTY parameter will now accept the Default keyword in place of a blank string, which tells the function to return an array of all known properties, up to the setting of $iPropertyCount.

Update: Feb-11-2013

I have updated this function again.

  • Now it has a single point of return, except for error exceptions, instead of multiple places that it returned from previously.
  • I've renamed the variables used so that they'll be less chance of a name collision with someone's script.
  • Fixed a small bug that added a blank line to the end of the array returned when getting all properties.
  • Changed the return value on an error from 0 to an empty string.

NOTE: This is a repost of a thread I had already posted last year. I went looking for it today to update the code in it, and found that it had disappeared.

New code

#include <File.au3> ; only used for the example script, not needed for the UDF
#include <Array.au3> ; only used for the example script, not needed for the UDF
#include <Constants.au3> ; only used for the MsgBox, not needed for the UDF
$sFolder = FileSelectFolder("Select a folder to scan", "")
$sFolder &= ""
$aFiles = _FileListToArray($sFolder, "*.exe")
For $I = 1 To $aFiles[0]
    $aDetails = _FileGetProperty($sFolder & "\" & $aFiles[$I]) ; Returns an array with all properties of the file
    _ArrayDisplay($aDetails)
Next
Global $sDetails = _FileGetProperty($sFolder & "\" & $aFiles[$aFiles[0]], "date modified")
MsgBox($MB_SYSTEMMODAL, "Date Modified", $sDetails)
;===============================================================================
; Function Name.....: _FileGetProperty
; Description.......: Returns a property or all properties for a file.
; Version...........: 1.0.2
; Change Date.......: 05-16-2012
; AutoIt Version....: 3.2.12.1+
; Parameter(s)......: $FGP_Path - String containing the file path to return the property from.
;                     $FGP_PROPERTY - [optional] String containing the name of the property to return. (default = "")
;                     $iPropertyCount - [optional] The number of properties to search through for $FGP_PROPERTY, or the number of items
;                                       returned in the array if $FGP_PROPERTY is blank. (default = 300)
; Requirements(s)...: None
; Return Value(s)...: Success: Returns a string containing the property value.
;                     If $FGP_PROPERTY is blank, a two-dimensional array is returned:
;                         $av_array[0][0] = Number of properties.
;                         $av_array[1][0] = 1st property name.
;                         $as_array[1][1] = 1st property value.
;                         $av_array[n][0] = nth property name.
;                         $as_array[n][1] = nth property value.
;                     Failure: Returns an empty string and sets @error to:
;                       1 = The folder $FGP_Path does not exist.
;                       2 = The property $FGP_PROPERTY does not exist or the array could not be created.
;                       3 = Unable to create the "Shell.Application" object $objShell.
; Author(s).........: - Simucal <Simucal@gmail.com>
;                     - Modified by: Sean Hart <autoit@hartmail.ca>
;                     - Modified by: teh_hahn <sPiTsHiT@gmx.de>
;                     - Modified by: BrewManNH
; URL...............: http://www.autoitscript.com/forum/topic/34732-udf-getfileproperty/page__view__findpost__p__557571
; Note(s)...........: Modified the script that teh_hahn posted at the above link to include the properties that
;                     Vista and Win 7 include that Windows XP doesn't. Also removed the ReDims for the $av_ret array and
;                     replaced it with a single ReDim after it has found all the properties, this should speed things up.
;                     I further updated the code so there's a single point of return except for any errors encountered.
;                     $iPropertyCount is now a function parameter instead of being hardcoded in the function itself.
;===============================================================================
Func _FileGetProperty($FGP_Path, $FGP_PROPERTY = "", $iPropertyCount = 500)
    If $FGP_PROPERTY = Default Then $FGP_PROPERTY = ""
    $FGP_Path = StringRegExpReplace($FGP_Path, '["'']', "") ; strip the quotes, if any from the incoming string
    If Not FileExists($FGP_Path) Then Return SetError(1, 0, "") ; path not found
    Local Const $objShell = ObjCreate("Shell.Application")
    If @error Then Return SetError(3, 0, "")
    Local Const $FGP_File = StringTrimLeft($FGP_Path, StringInStr($FGP_Path, "\", 0, -1))
    Local Const $FGP_Dir = StringTrimRight($FGP_Path, StringLen($FGP_File) + 1)
    Local Const $objFolder = $objShell.NameSpace($FGP_Dir)
    Local Const $objFolderItem = $objFolder.Parsename($FGP_File)
    Local $Return = "", $iError = 0
    If $FGP_PROPERTY Then
        For $I = 0 To $iPropertyCount
            If $objFolder.GetDetailsOf($objFolder.Items, $I) = $FGP_PROPERTY Then
                $Return = $objFolder.GetDetailsOf($objFolderItem, $I)
            EndIf
        Next
        If $Return = "" Then
            $iError = 2
        EndIf
    Else
        Local $av_ret[$iPropertyCount + 1][2] = [[0]]
        For $I = 1 To $iPropertyCount
            If $objFolder.GetDetailsOf($objFolder.Items, $I) Then
                $av_ret[$I][0] = $objFolder.GetDetailsOf($objFolder.Items, $I - 1)
                $av_ret[$I][1] = $objFolder.GetDetailsOf($objFolderItem, $I - 1)
;~              $av_ret[0][0] += 1
                $av_ret[0][0] = $I
            EndIf
        Next
        ReDim $av_ret[$av_ret[0][0] + 1][2]
        If Not $av_ret[1][0] Then
            $iError = 2
            $av_ret = $Return
        Else
            $Return = $av_ret
        EndIf
    EndIf
    Return SetError($iError, 0, $Return)
EndFunc   ;==>_FileGetProperty

Warning, old code below.

Spoiler
#include <File.au3> ; only used for the example script, not needed for the UDF
#include <Array.au3> ; only used for the example script, not needed for the UDF
$sFolder = FileSelectFolder("Select a folder to scan", "")
$sFolder &= ""
$aFiles = _FileListToArray($sFolder)
For $I = 1 To $aFiles[0]
$aDetails = _FileGetProperty($sFolder & $aFiles[$I]) ; Returns an array with all properties of the file
_ArrayDisplay($aDetails)
ConsoleWrite("File size of " & $sFolder & $aFiles[$I] & " = " & _FileGetProperty($sFolder & $aFiles[$I], "size") & @CRLF) ; displays in the console the Size of the file
Next

;===============================================================================
; Function Name.....: _FileGetProperty
; Description.......: Returns a property or all properties for a file.
; Version...........: 1.0.2
; Change Date.......: 05-16-2012
; AutoIt Version....: 3.2.12.1+
; Parameter(s)......: $FGP_Path - String containing the file path to return the property from.
;                     $FGP_PROPERTY - [optional] String containing the name of the property to return. (default = "")
; Requirements(s)...: None
; Return Value(s)...: Success: Returns a string containing the property value.
;                     If $FGP_PROPERTY is empty, an two-dimensional array is returned:
;                         $av_array[0][0] = Number of properties.
;                         $av_array[1][0] = 1st property name.
;                         $as_array[1][1] = 1st property value.
;                         $av_array[n][0] = nth property name.
;                         $as_array[n][1] = nth property value.
;                     Failure: Returns an empty string and sets @error to:
;                       1 = The folder $FGP_Path does not exist.
;                       2 = The property $FGP_PROPERTY does not exist or the array could not be created.
;                       3 = Unable to create the "Shell.Application" object $objShell.
; Author(s).........: - Simucal <Simucal@gmail.com>
;                     - Modified by: Sean Hart <autoit@hartmail.ca>
;                     - Modified by: teh_hahn <sPiTsHiT@gmx.de>
;                     - Modified by: BrewManNH
; URL...............: http://www.autoitscript.com/forum/topic/34732-udf-getfileproperty/page__view__findpost__p__557571
; Note(s)...........: Modified the script that teh_hahn posted at the above link to include the properties that
;                     Vista and Win 7 include that Windows XP doesn't. Also removed the ReDims for the $av_ret array and
;                     replaced it with a single ReDim after it has found all the properties, this should speed things up.
;                     I further updated the code so there's a single point of return except for any errors encountered.
;===============================================================================
Func _FileGetProperty($FGP_Path, Const $FGP_PROPERTY = "")
    $FGP_Path = StringRegExpReplace($FGP_Path, '["'']', "") ; strip the quotes, if any from the incoming string
    If Not FileExists($FGP_Path) Then Return SetError(1, 0, "") ; path not found
    Local Const $objShell = ObjCreate("Shell.Application")
    If @error Then Return SetError(3, 0, "")
    Local $iPropertyCount = 300 ; arbitrary number used, Windows 7 only returns 288 properties, Windows XP only returns 38 (future proofing)
    Local Const $FGP_File = StringTrimLeft($FGP_Path, StringInStr($FGP_Path, "\", 0, -1))
    Local Const $FGP_Dir = StringTrimRight($FGP_Path, StringLen($FGP_File) + 1)
    Local Const $objFolder = $objShell.NameSpace($FGP_Dir)
    Local Const $objFolderItem = $objFolder.Parsename($FGP_File)
    Local $Return = "", $iError = 0
    If $FGP_PROPERTY Then
        For $I = 0 To $iPropertyCount
            If $objFolder.GetDetailsOf($objFolder.Items, $I) = $FGP_PROPERTY Then
                $Return = $objFolder.GetDetailsOf($objFolderItem, $I)
            EndIf
        Next
        If $Return = "" Then
            $iError = 2
        EndIf
    Else
        Local $av_ret[$iPropertyCount + 1][2] = [[0]]
        For $I = 1 To $iPropertyCount
            If $objFolder.GetDetailsOf($objFolder.Items, $I) Then
                $av_ret[$I][0] = $objFolder.GetDetailsOf($objFolder.Items, $I - 1)
                $av_ret[$I][1] = $objFolder.GetDetailsOf($objFolderItem, $I - 1)
                $av_ret[0][0] += 1
            EndIf
        Next
        ReDim $av_ret[$av_ret[0][0] + 1][2]
        If Not $av_ret[1][0] Then
            $iError = 2
            $av_ret = $Return
        Else
            $Return = $av_ret
        EndIf
    EndIf
    Return SetError($iError, 0, $Return)
EndFunc   ;==>_FileGetProperty

The variable $iPropertyCount is currently set to 300, which is just a number I threw in there to make sure it gets all of the properties of the files under Windows 7 and a little bit of overhead.

Edited by BrewManNH
Updated code to make sure it includes all properties, it was cutting off some of the items.

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 Gude
How 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 post
Share on other sites
  • Replies 46
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

This is a modification of a script that was originally posted back in 2006, that was itself a modification of a script in the same thread, which was a modification of another script linked in that thr

Hi. I tried this: _ArrayDisplay( _FileGetProperty(FileOpenDialog("","",""))) and got: Row|Col 0|Col 1 [284]|Frame height|544 [285]|Frame rate|‎25 frames/second [286]|Frame

#include <File.au3> ; only used for the example script, not needed for the UDF #include <Array.au3> ; only used for the example script, not needed for the UDF #include <

:thumbsup:

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to post
Share on other sites

Just for completeness, Vista will return 278 properties.

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 Gude
How 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 post
Share on other sites

Didn't you create something like this ages ago?

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 parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to post
Share on other sites

Yes I did, but the thread doesn't exist any more. I made a note in the OP about it. I wanted to update the code, but couldn't find the thread so I recreated it with the help of the web wayback machine.

Hopefully now, it works as it is supposed to and follows better coding practices learned since then.

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 Gude
How 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 post
Share on other sites

How peculiar, thanks for explaining.

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 parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to post
Share on other sites
  • 4 months later...

Update: Jun-25-2013

I have tweaked this function again, a small update.

  • Added a new parameter to the function, $iPropertyCount, with a default setting of 300. This parameter was previously hard coded inside the function, now you are able to adjust it to the setting you desire/require. This value is used to determine how many file properties will be searched for the value passed in $FGP_PROPERTY, or the maximum amount of properties that will be returned in the array if $FGP_PROPERTY is a blank string.
  • The $FGP_PROPERTY parameter will now accept the Default keyword in place of a blank string, which tells the function to return an array of all known properties, up to the setting of $iPropertyCount.

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 Gude
How 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 post
Share on other sites
  • 5 months later...

I've had a problem with image files.

With tif and jpeg files the following code shows a null field for the dimensions.

Is it my error, a bug, or what?

Running XP SP3

William

Global $Testfile= FileOpenDialog ("Test File","C:\Documents and Settings\Owner\Desktop\SBACC Comp nov2013\possibles","All(*.*)")
Global $sProperties = _FileGetProperty ($Testfile,"width",300)
MsgBox (0,"width", $sProperties)
Global $aProperties = _FileGetProperty ($Testfile,"",300)
_ArrayDisplay ($aProperties)
Edited by saywell
Link to post
Share on other sites

What problem are you having with it? That works for me, I get a MsgBox showing the width of a *.bmp file when I test it with that. Then I get an _ArrayDisplay dialog showing all properties of the file. What do you get?

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 Gude
How 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 post
Share on other sites

I get a msgbox with null entry.

the array shows the property names in Col zero, but only some of the values in col 1.   The dates are all there, the camera model is shown, and the total pixels, but nothing in height or width .

If I mouseover the file in windows explorer, it displays them without a problem.

William

Link to post
Share on other sites

Is it showing the height and width, or the dimensions "### x ###" when you mouseover it?

Not every file has every property set, most have very few set, so even though it will show the property name there will be nothing showing in the details for that property.

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 Gude
How 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 post
Share on other sites

Mouseover shows dimensions, but this isn't listed in the array.  Nor in the file properties shown in irfanview - though the width and height are shown in the EXIF data.

If I right click on the file in explorer  ==> properties  ==> Summary tab, the width and height are listed there.

Is there any way to retrieve the dimensions - which would be just as easy to work with?

Regards,

William

Link to post
Share on other sites

Anything that shows in the _ArrayDisplay can be retrieved by this, if there isn't any information after the property then it can't.

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 Gude
How 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 post
Share on other sites

Thanks, BrewManNH.  Looks like the info is inaccessible for scripting, then.

I'll look into getting it from the irfanview command line - though a bit messier as this will only write the data to a file, as far as I can make out.  But it should be easy to read it back into autoit.

Regards,

William

Link to post
Share on other sites

This seems to work for tif and jpeg files [change the extension in 2 places to switch between file types for this demo]

William

#Include <Array.au3>
#include <File.au3>
#Include <String.au3>
 
 
Global $sInImage= FileOpenDialog ("Test File","C:\Documents and Settings\Owner\Desktop\SBACC Comp nov2013\possibles","All(*.*)")
Global $Testfile = StringReplace ($sInImage,".tif",".txt")
RunWait (@ScriptDir&'\i_view32.exe "'& $sInImage & '" /info="'&$Testfile&'"','')
$file= FileOpen($Testfile)
$text = FileRead($file)
FileClose($file)
$adimensions = _StringBetween($text,"Image dimensions =","Pixels")
$aHtWid = StringSplit ($adimensions[0]," x ",1)
$wid = StringStripWS($aHtWid[1],8)
$ht = StringStripWS($aHtWid[2],8)
MsgBox (0,"Wid x Ht", $wid&"x"&$ht)
FileDelete ($Testfile)
exit
 
Edited by saywell
Link to post
Share on other sites
  • 11 months later...

#include <File.au3> ; only used for the example script, not needed for the UDF
#include <Array.au3> ; only used for the example script, not needed for the UDF
#include <Constants.au3> ; only used for the MsgBox, not needed for the UDF
$sFolder = FileSelectFolder("Select a folder to scan", "")
$sFolder &= ""
$aFiles = _FileListToArray($sFolder, "*.exe")
For $I = 1 To $aFiles[0]
    $aDetails = _FileGetProperty($sFolder & "\" & $aFiles[$I]) ; Returns an array with all properties of the file
    _ArrayDisplay($aDetails)
Next
Global $sDetails = _FileGetProperty($sFolder & "\" & $aFiles[$aFiles[0]], "date modified")
MsgBox($MB_SYSTEMMODAL, "Date Modified", $sDetails)

Just a suggestion: To avoid the example giving a "Subscript used on non-accessible variable" error if the scanned folder if $aFiles = 0, perhaps add something like this before the For loop:

If $aFiles = 0 Then

 MsgBox (0, "Error", "There were no *.exe files in folder")

 Exit

EndIf

 

(thanks for sharing)

Link to post
Share on other sites
  • 2 months later...
  • 2 years later...

@BrewManNH , I wanted to optimize the code and here it is:

#include <File.au3> ; only used for the example script, not needed for the UDF
#include <Array.au3> ; only used for the example script, not needed for the UDF
#include <Constants.au3> ; only used for the MsgBox, not needed for the UDF

example()
Func example()
    Local $n, $t, $aDetails
    For $n = 1 To 10
        $t = TimerInit()
        $aDetails = _FileGetProperty(@ScriptFullPath, 11)
        ConsoleWrite(Round(TimerDiff($t), 3) & @TAB & $aDetails & @CRLF)
    Next
    ConsoleWrite(@CRLF)
    For $n = 1 To 10 ; shows the optimization, repeatedly getting a property by name
        $t = TimerInit()
        $aDetails = _FileGetProperty(@ScriptFullPath, "Owner")
        ConsoleWrite(Round(TimerDiff($t), 3) & @TAB & $aDetails & @CRLF)
    Next
    ConsoleWrite(@CRLF)

    $t = TimerInit()
    $aDetails = _FileGetProperty(StringLeft(@WindowsDir, 2)) ; Returns an array with all properties of the file
    ConsoleWrite(Round(TimerDiff($t), 3) & ' - Drive properties' & @CRLF)
    _ArrayDisplay($aDetails, "Drive properties")

    $t = TimerInit()
    $aDetails = _FileGetProperty(@ScriptFullPath) ; Returns an array with all properties of the file
    ConsoleWrite(Round(TimerDiff($t), 3) & ' - file properties' & @CRLF)
    _ArrayDisplay($aDetails, "file properties")

    $t = TimerInit()
    $aDetails = _FileGetProperty(@ScriptDir) ; Returns an array with all properties of the file
    ConsoleWrite(Round(TimerDiff($t), 3) & ' - folder properties' & @CRLF)
    _ArrayDisplay($aDetails, "folder properties")

    $t = TimerInit()
    $sDetails = _FileGetProperty(@ScriptFullPath, "date modified")
    ConsoleWrite(Round(TimerDiff($t), 3) & " - date modified" & @CRLF)
    MsgBox($MB_SYSTEMMODAL, "Date Modified", $sDetails)

    Exit 0 ;
EndFunc   ;==>example

;===============================================================================
; Function Name.....: _FileGetProperty ; https://www.autoitscript.com/forum/topic/148232-_filegetproperty-retrieves-the-properties-of-a-file/
; Description.......: Returns a property, or all properties, for a file.
; Version...........: 1.0.3
; Change Date.......: 09-03-2017
; AutoIt Version....: 3.3.14.x (due to the use of Static, but it could be a Global and use 3.2.12.x)
; Parameter(s)......: $FGP_Path - String containing the file path to return the property from.
;                     $FGP_PROPERTY - [optional] String containing the name of the property to return. (default = "")
;                     $iPropertyCount - [optional] The number of properties to search through for $FGP_PROPERTY, or the number of items
;                                       returned in the array if $FGP_PROPERTY is blank. (default = 300)
; Requirements(s)...: None
; Return Value(s)...: Success: Returns a string containing the property value.
;                     If $FGP_PROPERTY is blank, a two-dimensional array is returned:
;                         $av_array[0][0] = Number of properties.
;                         $av_array[1][0] = 1st property name.
;                         $as_array[1][1] = 1st property value.
;                         $av_array[n][0] = nth property name.
;                         $as_array[n][1] = nth property value.
;                     Failure: Returns an empty string and sets @error to:
;                       1 = The folder $FGP_Path does not exist.
;                       2 = The property $FGP_PROPERTY does not exist or the array could not be created.
;                       3 = Unable to create the "Shell.Application" object $objShell.
; Author(s).........: - Simucal <Simucal@gmail.com>
;                     - Modified by: Sean Hart <autoit@hartmail.ca>
;                     - Modified by: teh_hahn <sPiTsHiT@gmx.de>
;                     - Modified by: BrewManNH
;                     - Modified by: argumentum ; added some optimization
; URL...............: http://www.autoitscript.com/forum/topic/34732-udf-getfileproperty/page__view__findpost__p__557571
; Note(s)...........: Modified the script that teh_hahn posted at the above link to include the properties that
;                     Vista and Win 7 include that Windows XP doesn't. Also removed the ReDims for the $av_ret array and
;                     replaced it with a single ReDim after it has found all the properties, this should speed things up.
;                     I further updated the code so there's a single point of return except for any errors encountered.
;                     $iPropertyCount is now a function parameter instead of being hardcoded in the function itself.
;                     Added the use of $FGP_PROPERTY as Index + 1 ( as is shown the array ), in additon to $FGP_PROPERTY as Verb
;                     Added the array Index to the @extended, as this the optimization is for just te last index used.
;===============================================================================
Func _FileGetProperty($FGP_Path, $FGP_PROPERTY = "", $iPropertyCount = 300)
    If $FGP_PROPERTY = Default Then $FGP_PROPERTY = ""
    $FGP_Path = StringRegExpReplace($FGP_Path, '["'']', "") ; strip the quotes, if any from the incoming string
    If Not FileExists($FGP_Path) Then Return SetError(1, 0, "") ; path not found
    Local Const $objShell = ObjCreate("Shell.Application")
    If @error Then Return SetError(3, 0, "")
    Local Const $FGP_File = StringTrimLeft($FGP_Path, StringInStr($FGP_Path, "\", 0, -1))
    Local Const $FGP_Dir = StringTrimRight($FGP_Path, StringLen($FGP_File) + 1)
    Local Const $objFolder = $objShell.NameSpace($FGP_Dir)
    Local Const $objFolderItem = $objFolder.Parsename($FGP_File)
    Local $Return = "", $iError = 0, $iExtended = 0
    Local Static $FGP_PROPERTY_Text = "", $FGP_PROPERTY_Index = 0
    If $FGP_PROPERTY_Text = $FGP_PROPERTY And $FGP_PROPERTY_Index Then
        If $objFolder.GetDetailsOf($objFolder.Items, $FGP_PROPERTY_Index) = $FGP_PROPERTY Then
            Return SetError(0, $FGP_PROPERTY_Index, $objFolder.GetDetailsOf($objFolderItem, $FGP_PROPERTY_Index))
        EndIf
    EndIf
    If Int($FGP_PROPERTY) Then
        $Return = $objFolder.GetDetailsOf($objFolderItem, $FGP_PROPERTY - 1)
        If $Return = "" Then
            $iError = 2
        EndIf
    ElseIf $FGP_PROPERTY Then
        For $I = 0 To $iPropertyCount
            If $objFolder.GetDetailsOf($objFolder.Items, $I) = $FGP_PROPERTY Then
                $FGP_PROPERTY_Text = $FGP_PROPERTY
                $FGP_PROPERTY_Index = $I
                $iExtended = $I
                $Return = $objFolder.GetDetailsOf($objFolderItem, $I)
            EndIf
        Next
        If $Return = "" Then
            $iError = 2
        EndIf
    Else
        Local $av_ret[$iPropertyCount + 1][2] = [[0]]
        For $I = 1 To $iPropertyCount
            If $objFolder.GetDetailsOf($objFolder.Items, $I) Then
                $av_ret[$I][0] = $objFolder.GetDetailsOf($objFolder.Items, $I - 1)
                $av_ret[$I][1] = $objFolder.GetDetailsOf($objFolderItem, $I - 1)
                $av_ret[0][0] += 1
            EndIf
        Next
        ReDim $av_ret[$av_ret[0][0] + 1][2]
        If Not $av_ret[1][0] Then
            $iError = 2
            $av_ret = $Return
        Else
            $Return = $av_ret
        EndIf
    EndIf
    Return SetError($iError, $iExtended, $Return)
EndFunc   ;==>_FileGetProperty

Thanks for sharing

Edit on 09-03-2017: Added the index value to the @Extended

Edited by argumentum
fix the code
Link to post
Share on other sites
  • 2 months later...

Trying to get the height and width from an .mp4 file, but i can't. Any idea why?

Spoiler

Renamer - Rename files and folders, remove portions of text from the filename etc.

GPO Tool - Export/Import Group policy settings.

MirrorDir - Synchronize/Backup/Mirror Folders

BeatsPlayer - Music player.

Params Tool - Right click an exe to see it's parameters or execute them.

String Trigger - Triggers pasting text or applications or internet links on specific strings.

Inconspicuous - Hide files in plain sight, not fully encrypted.

Regedit Control - Registry browsing history, quickly jump into any saved key.

Time4Shutdown - Write the time for shutdown in minutes.

Power Profiles Tool - Set a profile as active, delete, duplicate, export and import.

Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes.

NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s.

IUIAutomation - Topic with framework and examples

Au3Record.exe

Link to post
Share on other sites
9 hours ago, careca said:

Trying to get the height and width from an .mp4 file, but i can't. Any idea why?

ConsoleWrite( _FileGetProperty("my.mp4","Frame height") & @CRLF)
ConsoleWrite( _FileGetProperty("my.mp4","Frame width") & @CRLF)

That did it for me.

Edited by argumentum
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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By prizm1
      AppendVersion_X64

      AppendVersion_x64 is a simple program intended to expedite the systematic renaming of  executable
      installation files, compressed installation files and Start Menu links that point to installed executable
      program files.

      In this discussion, 'target executable file' can refer to an uncompressed installation executable, or to the
      compressed installation executable file inside a packaged compressed file (zip, 7z, rar or tar), or to the
      executable file that a Start Menu link points to. A 'rename target' can refer, again, to an uncompressed
      installation executable file, or to the compressed file containing a packaged target executable file, or to
      a Start Menu link pointing to a target executable file.

      There are four scenarios for AppendVersion processing:
      An installation executable file is renamed and appended with that target executable file's own
      file version number.
      A compressed installation file (zip, 7z, tar, or rar) is renamed and appended with its compressed
      target executable file's own file version number.
      A Start Menu link pointing to its target executable file is renamed and appended with that
      target executable file's own version number.
      A folder is selected containing any assorted collection of rename target types.

      Having an archived program installation file renamed with its target executable file's file properties
      version number appended to the installation file's name, in a systematic format, aids in quickly
      determining whether or not you have the latest version installed.

      Having all the Start Menu program links (rename targets) appended with their target executable file's
      version numbers quickly aids in determining whether or not you have the most recent published
      upgrade or update of that program installed. Hovering your mouse over  a Start Menu link will
      conveniently display the target executable file's version number.

      Start Menu links exist in two system folders:
      @ProgramsDir (%appdata%\Microsoft\Windows\Start Menu\Programs)
      @ProgramsCommonDir (%programdata%%\Microsoft\Windows\Start Menu\Programs)
      Renaming Start Menu links in these two folders require Administrator privilege. You can either compile
      this AppendVersion.au3 script with the #RequireAdmin macro at the top of the script, or go to the
      compiled executable 'AppendVersion_x64.exe' file's Properties Compatibility tab and check 'Run this
      program as an administrator'.

      ====
      AppendVersion can also receive full file path argument parameters via Run or the Windows terminal.
      This allows for processing files from different directory locations in one AppendVersion session.
      ====

      AppendVersion  is initiated via a Windows SendTo 'AppendVersion' link. Running the compiled
      executable 'AppendVersion_X64.exe' once will auto-create an 'AppendVersion' link in the SendTo
      subfolder if the SendTo link does not exist and will also create a default Settings.ini file in the @ScriptDir
      folder if the Settings.ini file does not exist. The Settings.ini file maintains basenames and other
      configuration data that AppendVersion requires.

      ====
      Icon @ScripDir subfolder location directive for compiling AppendVersion_x64.au3 is:
      #AutoIt3Wrapper_Icon=.\Icon\add2.ico
      ====

      To use AppendVersion, in Windows Explorer select one or more rename target files, rename target links
      and any folders containing rename target files or links, then select the SendTo 'AppendVersion' link.

      You can also right-click on a Start Menu link and select Open Location:

      After Windows Explorer opens, right-click on the highlighted rename target link and then select
      'AppendVersion' from the SendTo menu.

      You can also process Start menu rename target links enmasse in succession by selecting one of the two
      Programs folders where Windows maintains most all the Start Menu links:
      %appdata%\Microsoft\Windows\Start Menu
      %programdata%\Microsoft\Windows\Start Menu
      Select one of the two Programs folders and then select 'AppendVersion' from the SendTo menu

      You can process both Programs folders in one session by running the compiled executable
      'AppendVersion Start Menu Links_x64.exe'.

      ====
      The script maintains processed file identification data in the Settings.ini [BaseNames] section. This
      section is used in identifying new updated versions of earlier files previously processed by
      AppendVersion. This file identification data (key basenames and fingerprint value) is used to compare
      and systematically rename later matching updated versions of the identified file.

      'Basename(s)' is one or two substrings in the installation file that usually does not change in the rename
      target file name from one file version to the next.

      Except for file size and file/product version properties, which can change with every new file version, the
      remaining available target file properties are concatenated together to create a target file properties
      'fingerprint'. The fingerprint consists of file properties that usually will not change from one target file
      version to the next, i.e., 'File Description', 'Product Name', 'Copyright', 'Language', 'Original File name',
      'Legal Trademarks', 'Company Name' and 'DefaultLangCodePage'.

      The basename(s) and fingerprint together constitute the 'identification' of a candidate file. This ID is
      used to identify later downloaded versions of the file that can be automatically renamed without user
      interaction.

      If the target executable file's properties does not have a file version number, the file's product version
      number will be used instead in the version appending and renaming of the file.
      If the target executable has neither a file version nor product version number, the user will be prompted
      to enter the published file version number acquired from the provider's web site.

      Both the basename(s) and version numbers will be used for the renaming of the file.

      If the rename target file is in a popular compressed format, i.e., (*.zip, *.7z, *.rar, and *.tar), the script
      will use PeaZip-portable to decompress the zipped file into a temporary folder (@ScripDir & "\UnZip")
      and then prompt the user to select the target executable file with file properties used in the rename
      target 'identification'.
      The freeware PeaZip portable can be downloaded from:
      https://peazip.github.io/peazip-portable.html
      Unpack PeaZip portable into the @ScripDir & "\peazip" subfolder.

      Once the target executable file properties are read from the target executable, the user will be
      prompted to configure the basename(s) from the rename target file name, unless an identification
      already exists in Settings.ini, in which case the rename target file will automatically be renamed by
      AppendVersion. The process is not always fully automatic. If the target executable file has neither a file
      nor product version in its file properties, the user will be prompted to manually enter the published file
      version number.

      Process example, the target file for renaming is:
      FreeFileSync_11.14_[Donation_Edition]_Windows_Portable.zip

      Righ-click on the file. Select 'AppedVersion' from the SendTo submenu.

      The script, recognizing the rename target file as a compressed file (*.zip, *.7z, *.tar, and *.rar), will decompress
      the rename target file into a temporarily created @ScriptDir & '\UnZip' folder.

      Then, the user will then be prompted to select from the folder or subfolder containing the target
      executable file from which the file properties will be read:
      'FreeFileSync_11.14_[Donation_Edition]_Setup.exe'.

      Once the target executable file is selected and opened, the script will prompt the user to create one or
      two basename(s) from the rename target zip file's name.

      Base name(s) are created from the rename target zip file name (without extension):
      Examples,   'FreeFileSync_' , '[Donation_Edition]' and '_Windows_Portable'.

      Base names must be separate substrings in the rename target zip file's name.

      The user can choose to use just one or two base names for file identification.

      The user can also choose to use the entirety of the original rename target zip file name:
      'FreeFileSync_11.14_[Donation_Edition]_Windows_Portable'
      as a base name in renaming later versions of FreeFileSync. This may not be advisable with this base name, since later versions of this rename target
      file name will not have version '11.14' in the name, but this naming convention is an option.

      In this example, I will use the 'FreeFileSync_" and '[Donation_Edition]' substrings as base names, since
      these are file name structures that are unique to the file name and will probably not change in later
      published file version names.

      The file properties fingerprint collected from the FreeFileSync.exe executable is:
      FreeFileSyncFreeFileSync.orgFreeFileSync-FolderComparisonandSynchronization040904B0

      To use two base names for later automatic file version identification, the base names must be
      separated with a colon ':', i.e., 'FreeFileSync_:[Donation_Edition]'.
      If a later file version of a candidate rename target file's name contains both of these substrings and
      has the same target executable file properties 'fingerprint', the script will automatically identify and
      rename the later-versioned file's name.

      The combined file identification of [Key] base names + [Value] fingerprint is:
      FreeFileSync_:[Donation_Edition]=FreeFileSyncFreeFileSync.orgFreeFileSyncFolderComparisonandSynchronization040904B0

      This identification is stored in the Settings.ini file under the [BaseNames] section.
      When a new version of FreeFileSync_XX.XX_[Donation_Edition]_Windows_Portable.zip is processed by
      AppendVersion, if an entry in Settings.ini [BaseNames] section can match the rename target's file name
      and also match the candidate target executable's fingerprint, the script will use this to automatically rename the zip file.

      Finally, the rename target file is then renamed with the base name(s) and with one of three version
      prefixes to the version number:
      " - fver_ "; for files with a properties file version number (preferred default)
      " - pver_ "; for files without file version numbers but with product version numbers(fallback)
      " - uver_ "; for files with neither file nor product numbers. User manually entered published file version number.

      NOTE: These version format prefixes can be changed in Settings.ini [QuotedPrefix] section to meet your
      prefix format preferences. The [QuotedPrefix] section value entries must be quoted.

      In this example, FreeFileSync.exe contains a properties file version number of 11.14.0.0
      The resultant AppendVersion renamed file is:
      FreeFileSync_[Donation_Edition] - fver_ 11.14.0.0.zip

      This systematic approach works well with most file names, but files with short file names such as 'a.exe'
      and having no finger-printable file properties are problematic. In such case, perhaps renaming the
      downloaded file with a longer, unique name before running this script on it is preferrable, although
      renaming the file before processing it with AppendVersion circumvents the purpose of the script. This
      would not be an issue if software creators would always include full file properties in their file
      compilations.
      Settings.ini add2.ico ReadMe.pdf
      AppendVersion Start Menu Links.au3 AppendVersion.au3
    • By litlmike
      I had a hdd that crashed and upon receiving a replacement from my online backup, the Date Created, Date Modified, and Date Accessed were set to the date of the copy, and not the actual creation date.  I did find that for my .jpgs, under Details, there is a Date Taken field that has the correct data.  Can AutoIt be used to find the Date Taken, and then Set the Date Created to the value in Date Taken?  I've never seen any of these kinds of functions in AutoIt.  Thanks!
    • By cyberbit
      Super Update!
      Now supports full console actions and running commands from a text file! Run fropmod ? for options.
       
      Using the GUI:
      Drag and drop a file to the dropbox at the top.
       
      To set a date/time pair to the current date and time, right mouse click the control and hit Set to Now.
       
      Hold Shift to use alternate options.
       
      Hash is a slightly trimmed MD5 of the entire file, so large files will take a bit to compute.
       
      Using the CmdLine:
       
      FropMod uses a linear-style command line interface. Commands are linked together to perform tasks. Files are loaded using
      fropmod f <filename> or, to be compatible with native Windows functionality,
      fropmod <filename>.   * Note that this mode will only function if the only parameter is the filename. Avoid using wildcards in the filename, as they will not always act as excepted. If the working directory is changed, FropMod will correctly handle relative paths.
       
      Every command after f applies to the file passed to f. There is no save command, so each operation is applied immediately.
       
      If ? is used, the GUI is automatically suppressed and further actions are ignored. ? is not valid except as the first parameter.
       
      nogui may be used at any place in the command string, except within parameters of other commands. It will suppress the creation of the GUI, and cause FropMod to exit immediately after all commands are parsed.
       
      Attributes (a) use the following format: +-RASHOT (Read-Only, Archive, System, Hidden, Offline, Temporary). The attributes N, D, and C (Normal, Directory, Compressed) are documented, but read-only. The Offline attribute is not compatible with files on removable drives. Additionally, Normal only appears when all other attributes are removed.
       
      Dates (d[m|c|a]) use the following format: YYYYMMDDHHmmss. Use the 24hr clock. I think these are broken right now (?) but if they work for you, great. 
       
      Opening the file as an archive (z) extracts dependencies into a temporary folder, then opens the file through it.
       
      Only 63 parameters can be passed through the command line (including both commands and their values) due to AutoIt limitations, but larger strings can be used in an .fm1 script, and be run fully.
       
      FropMod Scripts (.fm1) are run using the e command. Technically they can be of any extension, but I may add action verbs to these files to run on double click in the future.
       
      Format of an .fm1 script:
      [FMScript] ;comment command [parameter] ;comment command [parameter] ;comment ;comment ... In an .fm1 script, there is no limit to the number of commands that will be parsed. Limit one command per line, as the parser will break if they are stacked. Comments can be by themselves or in-line with commands, using a semicolon. All white space is trimmed off the end of a command, as well.
       
      Scripts may be called from other scripts. Used properly, this allows for complex building of batch processing. HOWEVER, DO NOT COMMIT A MAJOR PROGRAMMING SIN AND CALL A SCRIPT IN ITSELF! This will kick off an infinite recursion that will quickly drag your system down to a speed at which an Apple 2 could compete. Moral of the story: be careful. 
       
      The sources use the WinAPIEx and Resources UDFs.
       
      Here's the updated source and dependencies: fropmodsrc0.2.zip
      Modifies timestamps and attributes of files and directory trees. Can be used to fix EPOCHed files in some cases. Supports Drag & Drop. Supports console actions and text file scripts. Included in the archive is the source, examples and compiled x86/x64 EXEs with icon.

      Previous versions:



      Changelog:




      Regards,
      Cyberbit

×
×
  • Create New...