Dein Problem ist für einen Anfänger nicht ganz leicht zu lösen. Man muss schon genau wissen, was man für Pfade (relativ oder absolut) von der Einlesefunktion zurückbekommt.
Dementsprechend muss man FileMove anpassen. Hier mal eine Fix- und Fertig-Version (zum testen kannst Du Zeile 20 auskommentieren):
Spoiler anzeigen
Global $sDate = _InputDateBox(0, 'Kopier-Datum')
If @error Then Exit ; Wenn der Benutzer auf Abbrechen geklickt hat, Programm beenden
Global $sSourceDir = FileSelectFolder('Quellverzeichnis auswählen!', '', 2, @ScriptDir) ; Quellverzeichnis auswählen!
If @error Then Exit ; Wenn der Benutzer auf Abbrechen geklickt hat, Programm beenden
If Not FileExists($sSourceDir) Then Exit MsgBox(0, 'Fehler!', 'Quellverzeichnis existiert nicht!')
If StringRight($sSourceDir, 1) <> '\' Then $sSourceDir &= '\' ; Wenn am Ende des Verzeichnisses ein Backslash fehlt, diesen hinzufügen
Global $sDestDir = FileSelectFolder('Zielverzeichnis auswählen!', '', 2, @DesktopDir) ; Zielverzeichnis auswählen!
If @error Then Exit ; Wenn der Benutzer auf Abbrechen geklickt hat, Programm beenden
If Not FileExists($sDestDir) Then Exit MsgBox(0, 'Fehler!', 'Zielverzeichnis existiert nicht!')
If StringRight($sDestDir, 1) <> '\' Then $sDestDir &= '\' ; Wenn am Ende des Verzeichnisses ein Backslash fehlt, diesen hinzufügen
Global $aFileList = _RecursiveFileListToArray($sSourceDir, '.*', 1) ; Alle Dateien aus dem Quellverzeichnis (rekursiv) einlesen
;~ _ArrayDisplay($aFileList)
If MsgBox(4 + 48 + 256 + 262144, 'Sicherheitsfrage', 'Sollen die Dateien wirklich verschoben werden?') = 7 Then Exit
For $i = 1 To $aFileList[0] ; $aFileList[0] enthält anzahl
If FileGetTime($aFileList[$i], 0, 1) < $sDate Then ; wenn das Änderungsdatum der Datei kleiner als das ausgewählte Datum ist, dann Datei verschieben
ConsoleWrite(StringFormat('\nQuelle: "%s"\n-> Ziel: "%s"\n', $aFileList[$i], StringReplace($aFileList[$i], $sSourceDir, $sDestDir)))
If FileMove($aFileList[$i], StringReplace($aFileList[$i], $sSourceDir, $sDestDir),
= 0 Then ConsoleWrite('! Fehler! Die Datei konnte nicht verschoben werden!' & @CR & @CR)
EndIf
Next
;===============================================================================
; Function Name: _InputDateBox([$iFormat][, $sTitle][, $sText][, $sDefaultDate][, $hParent])
; Description: Fragt den Benutzer nach Datum oder Datum und Uhrzeit und gibt dies als String in Form von "YYYYMMDDhhmmss" zurück
; Parameter(s): $iFormat = 0 oder 1
; bei 0 wird nur nach dem Datum gefragt (Uhrzeit wird dann als "000000" zurückgegeben)
; bei 1 wird nach Datum und Uhrzeit gefragt
; Requirement: -
; Return Value(s): bei Erfolg = String in Form von "YYYYMMDDhhmmss"
; bei Abbruch = Leerstring und @error = 1
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _InputDateBox($iFormat = 1, $sTitle = '', $sText = '', $sDefaultDate = '', $hParent = '')
If $iFormat < 0 Or $iFormat > 1 Then $iFormat = 1
If $sTitle = '' Or $sTitle = Default Then $sTitle = 'Datum-Box'
If $sText = '' Or $sText = Default Then $sText = 'Bitte Datum auswählen!'
If $iFormat Then $sText = 'Bitte Datum und Uhrzeit auswählen!'
Local $iOnEventMode = Opt('GUIOnEventMode', 0), $sRetDate = '', $iError = 0
Local $hGui = GUICreate($sTitle, 260 + $iFormat * 85, 130, Default, Default, Default, 8, $hParent)
GUISetBkColor(0xCCCCCC, $hGui)
GUISetIcon('shell32.dll', 24, $hGui)
GUICtrlCreateGroup($sText, 10, 20, 240 + $iFormat * 85, 70)
GUICtrlSetFont(-1, 10, 400, 0, 'Arial', 5)
GUICtrlCreateIcon('shell32.dll', -21, 30, 48, 32, 32)
Local $idDate = GUICtrlCreateDate($sDefaultDate, 75, 49, 150 + $iFormat * 85, 30, $iFormat)
GUICtrlSetFont(-1, 14, 400, 0, 'Verdana', 5)
If $iFormat Then
Local $DTM_SETFORMAT_ = 0x1032
Local $sStyle = 'dd.MM.yyyy HH:mm:ss'
GUICtrlSendMsg($idDate, $DTM_SETFORMAT_, 0, $sStyle)
EndIf
GUICtrlCreateGroup('', -99, -99, 1, 1)
Local $idOk = GUICtrlCreateButton('Ok', 100 + $iFormat * 85, 100, 60, 25, 1) ; <- Value 1 = $BS_DEFPUSHBUTTON
Local $idCancel = GUICtrlCreateButton('Abbrechen', 170 + $iFormat * 85, 100, 80, 25)
GUISetState(@SW_SHOW, $hGui)
While True
Switch GUIGetMsg()
Case $idCancel, -3 ; <- Value -3 = $GUI_EVENT_CLOSE
$iError = 1
ExitLoop
Case $idOk
$sRetDate = StringRegExpReplace(GUICtrlRead($idDate), '(\d{2})\.(\d{2})\.(\d{4}).*', '$3$2$1')
If $iFormat Then
$sRetDate &= StringRegExpReplace(GUICtrlRead($idDate), '\d{2}\.\d{2}\.\d{4} (\d{2}):(\d{2}):(\d{2})', '$1$2$3')
Else
$sRetDate &= '000000'
EndIf
ExitLoop
EndSwitch
WEnd
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOnEventMode)
Return SetError($iError, 0, $sRetDate)
EndFunc ;==>_InputDateBox
;===============================================================================
; Function Name: _RecursiveFileListToArray($sPath[, $sPattern][, $iFlag][, $iFormat][, $fRecursion][, $sDelim])
; Description:: gibt Verzeichnisse (rekursiv) und/oder Dateien zurück, die einem RegExp-Pattern entsprechen
; Parameter(s): $sPath = Startverzeichnis
; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
; $iFlag = Auswahl
; 0 = Dateien & Verzeichnisse
; 1 = nur Dateien
; 2 = nur Verzeichnisse
; $iFormat = Rückgabeformat
; 0 = String
; 1 = Array mit [0] = Anzahl
; 2 = Nullbasiertes Array
; $fRecursion = Verzeichnisse rekursiv durchsuchen
; False = Nein
; True = Ja
; $sDelim = Trennzeichen für die String-Rückgabe
; Requirement(s): AutoIt 3.3.0.0
; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
; Author(s): Oscar (http://www.autoit.de)
; Anregungen von: bernd670 (http://www.autoit.de)
; und: AspirinJunkie (http://www.autoit.de)
;===============================================================================
Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $fRecursion = True, $sDelim = @CRLF, $fOpenDLL = True)
Local $hSearch, $sFile, $sReturn = '', $aD
Local Static $hDll
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$hSearch = FileFindFirstFile($sPath & '*')
If Not @error And $hSearch <> -1 Then
If $fOpenDLL Then $hDll = DllOpen('kernel32.dll')
While True
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If @extended Then
$aD = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFile)
If @error Or BitAND($aD[0], 0x400) Then ContinueLoop
If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
If $fRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0, True, $sDelim, False)
ContinueLoop
EndIf
If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
WEnd
FileClose($hSearch)
If $fOpenDLL Then DllClose($hDll)
EndIf
If $iFormat = 2 Then $iFormat = 3
If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
Return $sReturn
EndFunc ;==>_RecursiveFileListToArray