1

Тема: AHK: Копирование последней созданной директории

Никак не могу разобраться.
Вот, что удалось накопать, но работает только с файлами, а мне нужно чтобы поиск шёл только по директориям и копировалась только последняя созданная директория.
Ткните носом, пжлста

F10::
Folder = C:\ZooSala

Loop, %Folder%\*
{
     FileGetTime, Time, %A_LoopFileFullPath%, C
     If (Time > Time_Orig)
     {
          Time_Orig := Time
          File := A_LoopFileName
     }
}
MsgBox, %File%
FileCopyDir, C:\ZooSala\%File%, E:\Archive

2

Re: AHK: Копирование последней созданной директории

Проверьте это:

Loop (файлы и папки)
Возвращает указанные файлы или папки по одному/одной.

Loop, FilePattern [, IncludeFolders?, Recurse?]

3

Re: AHK: Копирование последней созданной директории

Точно, нужно было двоечку поставить

F10::
Folder = C:\ZooSala

Loop, %Folder%\* ,2
{
     FileGetTime, Time, %A_LoopFileFullPath%, C
     If (Time > Time_Orig)
     {
          Time_Orig := Time
          File := A_LoopFileName
     }
}
MsgBox, %File%
FileCopyDir, C:\ZooSala\%File%, E:\Archive

Но почему-то в папку Archive не копирует.

4

Re: AHK: Копирование последней созданной директории

Переделал скрипт вот в такой.
И всё-равно ничего не копируется.
В чём ошибка?

F10::
Folder = C:\ZooSala

Loop, %Folder%\* ,2
{
     FileGetTime, Time, %A_LoopFileFullPath%, C
     If (Time > Time_Orig)
     {
          Time_Orig := Time
          File := A_LoopFileName
     }
}
MsgBox, %File%


; The following example copies all files and folders inside a folder to a different folder:
ErrorCount := CopyFilesAndFolders("C:\Zoosala\%File%\*.*", "E:\archive")
if ErrorCount <> 0
    MsgBox %ErrorCount% files/folders could not be copied.

CopyFilesAndFolders(SourcePattern, DestinationFolder, DoOverwrite = false)
; Copies all files and folders matching SourcePattern into the folder named DestinationFolder and
; returns the number of files/folders that could not be copied.
{
    ; First copy all the files (but not the folders):
    FileCopy, %SourcePattern%, %DestinationFolder%, %DoOverwrite%
    ErrorCount := ErrorLevel
    ; Now copy all the folders:
    Loop, %SourcePattern%, 2  ; 2 means "retrieve folders only".
    {
        FileCopyDir, %A_LoopFileFullPath%, %DestinationFolder%\%A_LoopFileName%, %DoOverwrite%
        ErrorCount += ErrorLevel
        if ErrorLevel  ; Report each problem folder by name.
            MsgBox Could not copy %A_LoopFileFullPath% into %DestinationFolder%.
    }
    return ErrorCount
}

5

Re: AHK: Копирование последней созданной директории

If (Time > Time_Orig)

Как проверить это условие? Откуда берётся содержимое переменной Time_Orig?

6

Re: AHK: Копирование последней созданной директории

Можно прописать так
Time_Orig = 0
Но как я понимаю, это не обязательно, так как и без этой строчки в сообщении он показывает название последней созданной директории, но почему-то, змей, не копирует её

F10::
Folder = C:\ZooSala
Time_Orig = 0
Loop, %Folder%\* ,2
{
     FileGetTime, Time, %A_LoopFileFullPath%, C
     If (Time > Time_Orig)
     {
          Time_Orig := Time
          File := A_LoopFileName
     }
}
MsgBox, %File%


; The following example copies all files and folders inside a folder to a different folder:
ErrorCount := CopyFilesAndFolders("C:\Zoosala\%File%\*.*", "E:\archive")
if ErrorCount <> 0
    MsgBox %ErrorCount% files/folders could not be copied.

CopyFilesAndFolders(SourcePattern, DestinationFolder, DoOverwrite = false)
; Copies all files and folders matching SourcePattern into the folder named DestinationFolder and
; returns the number of files/folders that could not be copied.
{
    ; First copy all the files (but not the folders):
    FileCopy, %SourcePattern%, %DestinationFolder%, %DoOverwrite%
    ErrorCount := ErrorLevel
    ; Now copy all the folders:
    Loop, %SourcePattern%, 2  ; 2 means "retrieve folders only".
    {
        FileCopyDir, %A_LoopFileFullPath%, %DestinationFolder%\%A_LoopFileName%, %DoOverwrite%
        ErrorCount += ErrorLevel
        if ErrorLevel  ; Report each problem folder by name.
            MsgBox Could not copy %A_LoopFileFullPath% into %DestinationFolder%.
    }
    return ErrorCount
}

7

Re: AHK: Копирование последней созданной директории

У меня вот так работает.
Хотя без третьей строчки тоже работает, но для порядка лучше оставить.

Folder1 = C:\ZooSala
Folder2 = C:\Archive
Time_Orig = 0
F10::
Loop, %Folder1%\* ,2
{
FileGetTime, Time, %A_LoopFileFullPath%, C
If (Time > Time_Orig)
	{
	Time_Orig := Time
	File := A_LoopFileName
	}
}
FileCopyDir, %Folder1%\%File%, %Folder2%\%File%

8 (изменено: Malcev, 2011-11-30 13:30:04)

Re: AHK: Копирование последней созданной директории

Да, так работает.
Спасибо.
Но мне необходимо копировать все файлы и подпапки.
Поэтому я стал использовать другой код, а в нём опять не работает

Folder1 = C:\ZooSala
Folder2 = С:\Archive
Time_Orig = 0
F10::
Loop, %Folder1%\* ,2
{
FileGetTime, Time, %A_LoopFileFullPath%, C
If (Time > Time_Orig)
    {
    Time_Orig := Time
    File := A_LoopFileName
    }
}
; The following example copies all files and folders inside a folder to a different folder:
ErrorCount := CopyFilesAndFolders("%Folder1%\%File%\*.*", "%Folder2%\%File%\")
if ErrorCount <> 0
    MsgBox %ErrorCount% files/folders could not be copied.

CopyFilesAndFolders(SourcePattern, DestinationFolder, DoOverwrite = false)
; Copies all files and folders matching SourcePattern into the folder named DestinationFolder and
; returns the number of files/folders that could not be copied.
{
    ; First copy all the files (but not the folders):
    FileCopy, %SourcePattern%, %DestinationFolder%, %DoOverwrite%
    ErrorCount := ErrorLevel
    ; Now copy all the folders:
    Loop, %SourcePattern%, 2  ; 2 means "retrieve folders only".
    {
        FileCopyDir, %A_LoopFileFullPath%, %DestinationFolder%\%A_LoopFileName%, %DoOverwrite%
        ErrorCount += ErrorLevel
        if ErrorLevel  ; Report each problem folder by name.
            MsgBox Could not copy %A_LoopFileFullPath% into %DestinationFolder%.
    }
    return ErrorCount
}

9

Re: AHK: Копирование последней созданной директории

А Вы знаете, зачем он нужен и как работает?

10 (изменено: Malcev, 2011-11-30 13:33:39)

Re: AHK: Копирование последней созданной директории

Ну да, вначале копируются все файлы, потом все папки.
Этот скрипт - пример с помощи.
Я его криво опубликовал, поэтому изменил там всё, после вашего ответа

11

Re: AHK: Копирование последней созданной директории

Вам требуется копировать все файлы, потом все папки? Это не соответствует названию темы и первому сообщению.

12 (изменено: Malcev, 2011-11-30 16:08:20)

Re: AHK: Копирование последней созданной директории

Да, изначально я считал, что это само собой подразумевается.
Проще говоря, мне требуется скопировать все файлы, подпапки и все файлы в подпапках в последней созданной директории.
Но в принципе, если алгоритм тот же - почему же не копируется?

13

Re: AHK: Копирование последней созданной директории

В сообщении #7 я привёл рабочий пример, где последняя (по времени) папка копируется вместе со всеми вложенными файлами и папками. Вы ответили, что работает. Зачем разрабатывать ещё один алгоритм? Если просто хочется понять пример из справки, то нужно с ней и разбираться.

14

Re: AHK: Копирование последней созданной директории

Действительно, работает.
А меня переглючило, что копируется, но без вложенных папок.
Объясните, пожалуйста, почему не работало так?

FileCopyDir, C:\ZooSala\%File%, E:\Archive

15

Re: AHK: Копирование последней созданной директории

Наверно потому что папка Archive уже существует. Опять же читайте документацию полностью и внимательно.

16

Re: AHK: Копирование последней созданной директории

А всё понял.
Это всё из-за неправильного понимания мною функции FileCopyDir
Теперь понял.

FileCopyDir, C:\ZooSala\%File%, E:\Archive

Мы дублируем и меняем это C:\ZooSala\%File% на это  E:\Archive.
А я ошибочно думал, что мы копируем это C:\ZooSala\%File% вот в это  E:\Archive
Всё очень тут запутанно.