1

Тема: 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

2

Re: AHK: Копирование файлов с атрибутом “только для чтения“

И Вам здоровья!
Почитайте про FileSetAttrib.

3

Re: AHK: Копирование файлов с атрибутом “только для чтения“

Выше упоминалось, что скрипт копирует новые или изменные файлы до определенной даты. А как выявить файлы созданные или измененные до этой даты, но перемещенные в папку недавно?

4 (изменено: peterverhovensky, 2021-04-29 07:15:44)

Re: AHK: Копирование файлов с атрибутом “только для чтения“

Надо ли будет использовать включение сохранения информации о дате последнего доступа к файлу в Windows?

5

Re: AHK: Копирование файлов с атрибутом “только для чтения“

Одна тема = один вопрос.

Если речь о бэкапе полного состояния папки, то список новых файлов можно получить в сравнении папки источника с папкой бэкапом. Ещё можно узнавать временные свойства файлов с помощью FileGetTime.