Ordner nach jüngster Datei umbenennen?

  • Hallo zusammen,

    ich möchte diesen Ordner C:\Programme\LuxCAD_XM in
    C:\Programme\LuxCAD_XM + _ + Geändert am Datum (JJJJ-MM-TT)
    der jüngste *.ma Datei (die soll in allen Unterodrner von C:\Programme\LuxCAD_XM durchgesucht werden) umbenennen.

    Bsp. nachher:C:\Programme\LuxCAD_XM_2010-10-27

    Wie geht das? Vielen, vielen Dank im Voraus!Viele Grüße,
    Dino

  • Ich hab dir mal schnell was programmiert. hoffe, dass alles funktioniert. war ja auch nur quick'n'dirty :D

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Global $Filearray
    $Filearray=_file_search("C:\Programme\LuxCAD_XM\",".*\.ma$")
    $jahr=0
    $monat=0
    $tag=0
    For $i=0 To UBound($Filearray)-1
    $array=_GetFileProperty($Filearray[$i])
    $array=StringSplit(StringLeft($array[4][2],StringInStr($array[4][2]," ")),".")
    If $array[3]>$jahr Or ($array[3]=$jahr And $array[2]>$monat) Or ($array[3]=$jahr And $array[2]=$monat And $array[1]>$tag) Then
    $jahr=$array[3]
    $monat=$array[2]
    $tag=$array[1]
    EndIf
    Next
    DirMove("C:\Programme\LuxCAD_XM\","C:\Programme\LuxCAD_XM_"&$jahr&"-"&$monat&"-"&$tag)
    Func _file_search($ordner,$regexfilter)
    ;by alexxh94
    Local $files[1],$anzahldateien=0
    Local $ordnerzumsuchen[1]=[$ordner],$actuellerordner=1,$anzahlordner=1
    While $actuellerordner<=$anzahlordner
    $search=FileFindFirstFile($ordnerzumsuchen[$actuellerordner-1]&"\*")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    If @extended Then
    $anzahlordner+=1
    ReDim $ordnerzumsuchen[$anzahlordner]
    $ordnerzumsuchen[$anzahlordner-1]=$ordnerzumsuchen[$actuellerordner-1]&$file&"\"
    Else
    If StringRegExp($file,$regexfilter) Then
    $anzahldateien+=1
    ReDim $files[$anzahldateien]
    $files[$anzahldateien-1]=$ordnerzumsuchen[$actuellerordner-1]&$file
    EndIf
    EndIf
    WEnd
    ToolTip("Ordner:" &$actuellerordner&"/"&$anzahlordner&" - "&Int($actuellerordner/$anzahlordner*100)&@CRLF&"Files: "&$anzahldateien,0,0)
    $actuellerordner+=1
    FileClose($search)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Return $files
    EndFunc
    ;===============================================================================
    ;
    ; Description: Returns the requested property or an array of all properties
    ; for the specified file.
    ; Syntax: _GetFileProperty( $sPath, optional $sProp )
    ; Parameter(s): $sPath - Path and filename of the file to query
    ; $sProp - (optional) Name of property to return
    ; if not specified will return array of all properties
    ; Requirement(s): AutoIt 3.2 or higher
    ; Return Value(s): On Success - Returns string value of property OR
    ; Returns 2 dimensional array (property name,value)
    ; On Failure - Returns nothing
    ; @error = 1 - file does not exist
    ; @error = 2 - unable to get property
    ; Author(s): Sean Hart (autoit AT hartmail DOT ca)
    ; (idea from GetExtProperty by Simucal, thanks)
    ; Note(s): Special
    ;
    ;===============================================================================
    Func _GetFileProperty($sPath, $sProp = "")
    ; Declare local variables
    Local $sFile, $sDir, $oShell, $oDir, $oFile, $i, $count, $aProps[1][3]

    [/autoit] [autoit][/autoit] [autoit]

    ; Init counter used for array of properties
    $count = 0

    [/autoit] [autoit][/autoit] [autoit]

    ; Check file exists first
    If Not FileExists($sPath) Then
    SetError(1)
    Return
    Else
    ; Pull file name and directory from full file path
    $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
    $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))

    [/autoit] [autoit][/autoit] [autoit]

    ; Create required objects
    $oShell = ObjCreate("shell.application")
    $oDir = $oShell.NameSpace($sDir)
    $oFile = $oDir.Parsename($sFile)

    [/autoit] [autoit][/autoit] [autoit]

    ; Loop through 99 possible property numbers (allows for future additions to property fields)
    For $i = 0 to 99
    ; If no property specified then add to array
    If ($sProp = "") Then
    ; Only add if property name is not blank
    If ($oDir.GetDetailsOf($oDir.Items, $i) <> "") Then
    ; Increase counter and redimension array
    $count = $count + 1
    ReDim $aProps[$count + 1][3]

    [/autoit] [autoit][/autoit] [autoit]

    ; Add property name and value to array
    $aProps[$count][1] = $oDir.GetDetailsOf($oDir.Items, $i)
    $aProps[$count][2] = $oDir.GetDetailsOf($oFile, $i)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; If property name matches property being requested, return value
    ElseIf $oDir.GetDetailsOf($oDir.Items, $i) = $sProp Then
    Return $oDir.GetDetailsOf($oFile, $i)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; If array was populated return array, otherwise return error 2
    If $count > 0 Then
    Return $aProps
    Else
    SetError(2)
    Return
    EndIf
    EndIf
    EndFunc ;==>_GetFileProperty

    [/autoit]
    • Offizieller Beitrag

    Wie ich es machen würde:
    - Vergleichsdatum auf z.B. 1.1.2010 setzen
    - Ordner rekursiv durchgehen und Dateidatum abfragen
    - wenn jünger als Vergleichsdatum ==> dem Vergleichsdatum das Dateidatum zuweisen
    - somit hast du am Ende das jüngste Datum
    - Startordner nun einfach umbenennen

    Edit: Kaum poste ich dir Anregungen - da hat schon wer was Fertiges gepostet. Vergiß das, dabei lernst du nichts. Machs selber. :D

  • Hallo Alex,

    ich habe es getestet und der Ordner heißt jetzt "LuxCAD_XM_2010 -10-27".
    Nach dem Jahr ist ein Leerzeichen zuviel, den ich nicht nicht wegbekomme.
    Ich habe so probiert: $jahr=$array[3]
    $jahr=StringLeft($jahr, StringInStr($jahr," "))

    Außerdem habe ich festgestellt, dass ich im Ordner C:\Programme\LuxCAD_XM sehr viele Dateien habe, und somit das Durchsuchen lange dauert.
    Könnten man es so abändern, dass nur die Unterordner die mit "bin" beginnen durchgesucht werden?
    Ich habe so probiert: $Filearray=_file_search("C:\Programme\LuxCAD_XM\",".*\bin*\.ma$")

    Besten Dank!

    @BugFix: Du hast Recht. Aber mir fehlt es immer schwer. Das ist einfach zu viel. So aufzeichnen und abändern, das würde ich zur Zeit noch hinbekommen. ;)

    Viele Grüße,
    Dino

  • meine methode um dateien zu suchen ist wahrscheinlich nicht die schnellste :rolleyes:
    versuchs mal so:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Global $Filearray
    $Filearray=_file_search("C:\Programme\LuxCAD_XM\",".*\.ma$")
    $jahr=0
    $monat=0
    $tag=0
    For $i=0 To UBound($Filearray)-1
    $array=_GetFileProperty($Filearray[$i])
    $array=StringSplit(StringLeft($array[4][2],StringInStr($array[4][2]," ")-1),".")
    If $array[3]>$jahr Or ($array[3]=$jahr And $array[2]>$monat) Or ($array[3]=$jahr And $array[2]=$monat And $array[1]>$tag) Then
    $jahr=$array[3]
    $monat=$array[2]
    $tag=$array[1]
    EndIf
    Next
    DirMove("C:\Programme\LuxCAD_XM\","C:\Programme\LuxCAD_XM_"&$jahr&"-"&$monat&"-"&$tag)
    Func _file_search($ordner,$regexfilter)
    ;by alexxh94
    Local $files[1],$anzahldateien=0
    Local $ordnerzumsuchen[1]=[$ordner],$actuellerordner=1,$anzahlordner=1
    While $actuellerordner<=$anzahlordner
    $search=FileFindFirstFile($ordnerzumsuchen[$actuellerordner-1]&"\*")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    If @extended Then
    If StringMid($file,1,3)="bin" Then
    $anzahlordner+=1
    ReDim $ordnerzumsuchen[$anzahlordner]
    $ordnerzumsuchen[$anzahlordner-1]=$ordnerzumsuchen[$actuellerordner-1]&$file&"\"
    EndIf
    Else
    If StringRegExp($file,$regexfilter) Then
    $anzahldateien+=1
    ReDim $files[$anzahldateien]
    $files[$anzahldateien-1]=$ordnerzumsuchen[$actuellerordner-1]&$file
    EndIf
    EndIf
    WEnd
    ToolTip("Ordner:" &$actuellerordner&"/"&$anzahlordner&" - "&Int($actuellerordner/$anzahlordner*100)&@CRLF&"Files: "&$anzahldateien,0,0)
    $actuellerordner+=1
    FileClose($search)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Return $files
    EndFunc
    ;===============================================================================
    ;
    ; Description: Returns the requested property or an array of all properties
    ; for the specified file.
    ; Syntax: _GetFileProperty( $sPath, optional $sProp )
    ; Parameter(s): $sPath - Path and filename of the file to query
    ; $sProp - (optional) Name of property to return
    ; if not specified will return array of all properties
    ; Requirement(s): AutoIt 3.2 or higher
    ; Return Value(s): On Success - Returns string value of property OR
    ; Returns 2 dimensional array (property name,value)
    ; On Failure - Returns nothing
    ; @error = 1 - file does not exist
    ; @error = 2 - unable to get property
    ; Author(s): Sean Hart (autoit AT hartmail DOT ca)
    ; (idea from GetExtProperty by Simucal, thanks)
    ; Note(s): Special
    ;
    ;===============================================================================
    Func _GetFileProperty($sPath, $sProp = "")
    ; Declare local variables
    Local $sFile, $sDir, $oShell, $oDir, $oFile, $i, $count, $aProps[1][3]

    [/autoit] [autoit][/autoit] [autoit]

    ; Init counter used for array of properties
    $count = 0

    [/autoit] [autoit][/autoit] [autoit]

    ; Check file exists first
    If Not FileExists($sPath) Then
    SetError(1)
    Return
    Else
    ; Pull file name and directory from full file path
    $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
    $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))

    [/autoit] [autoit][/autoit] [autoit]

    ; Create required objects
    $oShell = ObjCreate("shell.application")
    $oDir = $oShell.NameSpace($sDir)
    $oFile = $oDir.Parsename($sFile)

    [/autoit] [autoit][/autoit] [autoit]

    ; Loop through 99 possible property numbers (allows for future additions to property fields)
    For $i = 0 to 99
    ; If no property specified then add to array
    If ($sProp = "") Then
    ; Only add if property name is not blank
    If ($oDir.GetDetailsOf($oDir.Items, $i) <> "") Then
    ; Increase counter and redimension array
    $count = $count + 1
    ReDim $aProps[$count + 1][3]

    [/autoit] [autoit][/autoit] [autoit]

    ; Add property name and value to array
    $aProps[$count][1] = $oDir.GetDetailsOf($oDir.Items, $i)
    $aProps[$count][2] = $oDir.GetDetailsOf($oFile, $i)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; If property name matches property being requested, return value
    ElseIf $oDir.GetDetailsOf($oDir.Items, $i) = $sProp Then
    Return $oDir.GetDetailsOf($oFile, $i)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; If array was populated return array, otherwise return error 2
    If $count > 0 Then
    Return $aProps
    Else
    SetError(2)
    Return
    EndIf
    EndIf
    EndFunc ;==>_GetFileProperty

    [/autoit] [autoit][/autoit] [autoit][/autoit]