Тема: AHK: Копирование файлов с атрибутом “только для чтения“
Здравствуйте, форумчане. Составил такой скрипт, предназначенный для копирования измененных с определенной даты и более новые файлы из одной папки - в папку по тому же пути, но на другом диске. То есть, если файл был на "C:\Folder", то он переносится, к примеру, на "D:\Folder". Думаю использовать это для быстрого бэкапа, когда бОльшая часть папки сохранена в другое место, а копировать следует только новые или измененные файлы. В результате тестов выяснилось, что файлы с атрибутом "только для чтения" не перезаписываются. Так понимаю, единственный выход - снимать с них этот атрибут?
#SingleInstance Force
SetBatchLines -1
SendMode Input
SetWorkingDir, %A_ScriptDir%
InitialFolder := "C:\Folder" ;исходный путь
TargetDrive := "D" ;буква диска папки-приёмника
date := "2021/04/23"
date := StrReplace(date, "/")
;!!отчёт от текущего момента
diff -= date, Days ; здесь diff принимает значение A_Now
;!!отчёт от начала дня
;diff := A_Year . A_MM . A_DD
;diff -= date, D
;MsgBox, % diff
;https://www.autohotkey.com/boards/viewtopic.php?p=216003#p216003
loop, %InitialFolder%\*.*, 1, 1
{
if (SubStr(A_Now, 1, 8) - SubStr(A_LoopFileTimeModified, 1, 8) < diff)
{
GoSub, Copy
newFiles .= A_LoopFileFullPath "`n"
}
}
MsgBox % newFiles
Return
Copy:
FileGetAttrib, attrib, %A_LoopFileFullPath%
IfInString, attrib, D ;если папка
{
Dest_Dir := RegExReplace(A_LoopFileFullPath, "m`a)\w(:.*)", TargetDrive "$1")
FileGetAttrib, attrib, %Dest_Dir%\
IfNotInString, attrib, D
FileCreateDir, %Dest_Dir%\
}
Else ;если файл
{
Destination := RegExReplace(A_LoopFileFullPath, "m`a)\w(:.*)", TargetDrive "$1")
Dest_Dir := RegExReplace(Destination, "m`a)(.*)\\[^\\]*", "$1")
FileGetAttrib, attrib, %Dest_Dir%
IfNotInString, attrib, D
FileCreateDir, %Dest_Dir%\
FileGetAttrib, attrib, %Dest_Dir%\
IfNotInString, attrib, D
FileCreateDir, %Dest_Dir%\
FileCopy, %A_LoopFileFullPath%, %Destination%, 1 ;Перезапись
if ErrorLevel
MsgBox Не удалось скопировать `n"%A_LoopFileFullPath%"`nв `n"%Destination%"
}
Return