Hallo,
ich habe eine tief verschachtelte Ordnerstruktur auf d:\test bis zu 24 Ebenen.
Einige Ordnernamen enthalten den String " - 2020".
Ausschließlich diese möchte ich ohne Dateien in der gleichen Ordnerstruktur auf e:\test kopieren und dabei " - 2020" gegen " - 2021" austauschen.
Habt Ihr dafür eine Funktion oder ein Beispiel parat?
Dircopy / Filecopy scheinen von Hause aus keine Beschränkung hinsichtlich der Anfrage zu haben.
Eventuell wäre das Script von Oscar ein guter Ansatz. Falls ja, wie würdet Ihr das Script modifizieren, um zum Ziel zu kommen?
C
https://autoit.de/thread/15317-ordnerstruktur-in-datei-schreiben/
#include <Array.au3>
$sPath = @ScriptDir
$aDirs = _RecursiveFileListToArray($sPath, '', 2)
_ArrayDisplay($aDirs)
$hFile = FileOpen(@ScriptDir & '\DirList.txt', 2)
If $hFile <> -1 Then
For $i = 1 To $aDirs[0]
FileWriteLine($hFile, $aDirs[$i])
Next
FileClose($hFile)
EndIf
;===============================================================================
; Function Name: _RecursiveFileListToArray($sPath[, $sPattern][, $iFlag][, $iFormat][, $iRecursion][, $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
; $iRecursion = Verzeichnisse rekursiv durchsuchen
; 0 = Nein
; 1 = 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)
;===============================================================================
Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $iRecursion = 1, $sDelim = @CRLF)
Local $hSearch, $sFile, $sReturn = ''
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$hSearch = FileFindFirstFile($sPath & '*.*')
If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
While True
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
If $iRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
ContinueLoop
EndIf
If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
WEnd
FileClose($hSearch)
If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
Return $sReturn
EndFunc
Alles anzeigen
Sonnige Grüße.