Eine Lösung nur mit TC-Mitteln hab' ich leider nicht parat; Du könntest die Aufgabe aber mit einem Script lösen, z.B. diesem AutoIt3-Script:
Code: Select all
AutoItSetOption("WinTitleMatchMode", 4)
If Not WinExists("classname=TTOTAL_CMD") Then Exit
Global $strErrMsg = ""
Global $intNumSourceFilesCopied = 0
$strClipSave = ClipGet()
ClipPut("")
;*** cm_CopyTrgPathToClip=2030;Zielverzeichnis in Zwischenablage kopieren
_TCPostMessage(2030)
$strTargetDir = ClipGet()
;*** cm_CopyFullNamesToClip=2018;Copy names with full path
_TCPostMessage(2018)
If ClipGet() = "" Then
ClipPut($strClipSave)
Exit
EndIf
Global $arrListOfSourceFiles = StringSplit(ClipGet(), @CRLF, 1)
ClipPut($strClipSave)
$strErrMsg = $arrListOfSourceFiles[0] & " Dateien im Zielverzeichnis <" & $strTargetDir & "> updaten?"
If MsgBox(32+4+256, @ScriptName, $strErrMsg) = 7 Then Exit
$strErrMsg = ""
_RecurseDir($strTargetDir)
If $strErrMsg = "" Then
$strErrMsg = "Fertig!" & @LF & @LF & "(" & $intNumSourceFilesCopied & " von " & $arrListOfSourceFiles[0] & " Dateien kopiert)"
MsgBox(64, @ScriptName, $strErrMsg)
Else
MsgBox(48, @ScriptName, $strErrMsg)
EndIf
Exit
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Func _TCPostMessage($msg)
DllCall("user32.dll", "int", "PostMessage", "hwnd", WinGetHandle("classname=TTOTAL_CMD"), "int", 1075, "int", $msg, "int", 0)
Sleep(100)
EndFunc
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Func _RecurseDir($strDirname)
If FileChangeDir($strDirname) = 0 Then Return
Local $strFilename
Local $shndSearch = FileFindFirstFile("*.*")
If @error = 1 Then Return
While 1
$strFilename = FileFindNextFile($shndSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($strFilename), "D") Then
_RecurseDir($strFilename)
FileChangeDir("..")
Else
For $i = 1 To $arrListOfSourceFiles[0]
$p = StringInStr($arrListOfSourceFiles[$i], "\", 0, -1)
If $strFilename = StringMid($arrListOfSourceFiles[$i], $p+1) Then
If FileMove($strFilename, $strFilename & ".alt") = 0 Then
$strErrMsg &= "<" & @WorkingDir & "\" & $strFilename & "> konnte nicht in "
$strErrMsg &= "<" & @WorkingDir & "\" & $strFilename & ".alt> umbenannt werden" & @LF
EndIf
If FileCopy($arrListOfSourceFiles[$i], ".") = 0 Then
$strErrMsg &= "<" & $arrListOfSourceFiles[$i] & "> konnte nicht nach "
$strErrMsg &= "<" & @WorkingDir & "> kopiert werden" & @LF & @LF
Else
$intNumSourceFilesCopied += 1
EndIf
EndIf
Next
EndIf
WEnd
FileClose($shndSearch)
Return
EndFunc
Benutzung:
Im TC die aktuellen Dateien im Quell-Panel (im aktiven Panel) markieren, die in die (Unter-)Verzeichnisstruktur des Zielverzeichnisses kopiert werden sollen. Dann das Script laufen lassen.
Hinweis: Die alten Dateien werden nicht überschrieben, sondern vor dem Kopieren der neuen Dateien umbenannt (".alt" wird an den Dateinamen angehängt).