Что нового

[Файловая система] Выбор папки из директории по дате последнего изменения

Статус
Закрыто для дальнейших ответов.

Oleg-lamer

Новичок
Сообщения
10
Репутация
0
Версия AutoIt: 3.3.14.2

Описание:
Есть некая папка Dir
В ней лежит еще несколько папок с разными названиями (цифры, буквы)\
Задача выбрать из этих папок ту над которой производились последние изменения и передать ее имя в переменную
$Version

Т.е. у меня есть команда на запуск файла:
Код:
run (@ProgramFilesDir & "\1cv8\" & $Version & "\bin\chdbfl.exe","", @SW_HIDE,7)

И соответственно вместо Version должно быть имя папки с версией программы в духе "8.3.2056" и периодически в паке 1cv8 будут появлятся новые папки с новыми версиями проги, и мне нужно чтобы скрипт всегда запускал файл из последней созданной папки в расположении 1cv8.

Примечания:
я находил различные виды решения но для поиска файлов в папках, и они были очень громоздкие, я не мог понять как их переделать под поиск папок, ибо как понятно из ник-нейма, я еще совсем недавно (первая неделя) как начал работать с autoit.

Если напишите код с коментариями буду прям ну очень признателен, ибо хочу потихоньку разобратся как все это работает.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Так, вроде-бы проще всего :
Код:
#include <File.au3>
$MyDir = @ScriptDir ;Папка , где искать
;Получение массива с именами папок в указанной дирректории
$AllFile = _FileListToArray($MyDir, Default, 2)
If IsArray($AllFile) Then ;Если массив создан
    ;Для начала предполагаем, что первая папка и есть последняя модифицированная
	$LastFile = $AllFile[1]
	$LastFileDate = FileGetTime($MyDir & '\' & $AllFile[1], 0, 1)
	;Если найдено больше, чем одна папка
	If $AllFile[0] > 1 Then
		;Сравниваем дату модификации каждой из папок
		For $i = 2 To $AllFile[0]
			If FileGetTime($MyDir & '\' & $AllFile[$i], 0, 1) > $LastFileDate Then
				$LastFile = $AllFile[$i]
				$LastFileDate = FileGetTime($MyDir & '\' & $AllFile[$i], 0, 1)
			EndIf
		Next
	EndIf
EndIf

MsgBox(0, '','Файл '& $LastFile & @CR &'Путь к файлу  '& $MyDir & '\' & $LastFile & @CR&'Модифицирован '& $LastFileDate)
 
Автор
O

Oleg-lamer

Новичок
Сообщения
10
Репутация
0
Отлично! Работает! Огромное спасибо, и отдельное за комменты. не сразу сообразил какую из переменных вытаскивать, для получения имени папки, но через пару минут вкурил)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Автор
O

Oleg-lamer

Новичок
Сообщения
10
Репутация
0
Понимаю что где то туплю но не пойму как так, вот этот код переделанный под мои нужды у меня работал без вопросов, но вдруг стал ругатся что обращается к не заведенной переменной. Раньше я отсюда брал $LastFile и вставлял его в нужные места, но теперь он этого не дает сделать и я прям потерялся - а какая переменная в результате работы этой функции будет искомым обьектом? Я не могу понять куда передается результат.
Код:
Global $MyDir = (@ProgramFilesDir & "\1cv8\") ;Папка , где искать
;Получение массива с именами папок в указанной дирректории
$AllFile = _FileListToArray($MyDir, Default, 2)
If IsArray($AllFile) Then ;Если массив создан
    ;Для начала предполагаем, что первая папка и есть последняя модифицированная
    $LastFile = $AllFile[1]
    $LastFileDate = FileGetTime($MyDir & '\' & $AllFile[1], 0, 1)
    ;Если найдено больше, чем одна папка
    If $AllFile[0] > 1 Then
        ;Сравниваем дату модификации каждой из папок
        For $i = 2 To $AllFile[0]
            If FileGetTime($MyDir & '\' & $AllFile[$i], 0, 1) > $LastFileDate Then
                $LastFile = $AllFile[$i]
                $LastFileDate = FileGetTime($MyDir & '\' & $AllFile[$i], 0, 1)
            EndIf
        Next
    EndIf
 EndIf
 
Автор
O

Oleg-lamer

Новичок
Сообщения
10
Репутация
0
не инклюд у меня в коде на месте. я в комент его не добавил только. в общем коде оно вообще вот так выглядит
Код:
#include <GUIConstantsEx.au3>

#include <File.au3>

#include <Date.au3>

#include <Inet.au3>

Global $MyDir = (@ProgramFilesDir & "\1cv8") ;Папка , где искать
;Получение массива с именами папок в указанной дирректории
$AllFile = _FileListToArray($MyDir, Default, 2)
If IsArray($AllFile) Then ;Если массив создан
    ;Для начала предполагаем, что первая папка и есть последняя модифицированная
    $LastFile = $AllFile[1]
    $LastFileDate = FileGetTime($MyDir & '\' & $AllFile[1], 0, 1)
    ;Если найдено больше, чем одна папка
    If $AllFile[0] > 1 Then
        ;Сравниваем дату модификации каждой из папок
        For $i = 2 To $AllFile[0]
            If FileGetTime($MyDir & '\' & $AllFile[$i], 0, 1) > $LastFileDate Then
                $LastFile = $AllFile[$i]
                $LastFileDate = FileGetTime($MyDir & '\' & $AllFile[$i], 0, 1)
            EndIf
        Next
    EndIf
 EndIf
 
A

Alofa

Гость
Пробуйте:
Код:
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <Date.au3>
#include <Inet.au3>

Global $LastFile, $MyDir = (@ProgramFilesDir & "\1cv8") ;Папка , где искать
;Получение массива с именами папок в указанной дирректории
$AllFile = _FileListToArray($MyDir, Default, 2)
If @error Then
	Local $aErrors[4] = ['Путь не найден или неисправный', 'Неверный параметр $sFilter', 'Неверный параметр $iFlag', 'Файл(ы) не найдены']
	MsgBox(262144+16, 'Ошибка!', $aErrors[@error - 1])
Else ;Если массив создан
	;Для начала предполагаем, что первая папка и есть последняя модифицированная
	$LastFile = $AllFile[1]
	$LastFileDate = FileGetTime($MyDir & '\' & $AllFile[1], 0, 1)
	;Если найдено больше, чем одна папка
	If $AllFile[0] > 1 Then
		;Сравниваем дату модификации каждой из папок
		For $i = 2 To $AllFile[0]
			If FileGetTime($MyDir & '\' & $AllFile[$i], 0, 1) > $LastFileDate Then
				$LastFile = $AllFile[$i]
				$LastFileDate = FileGetTime($MyDir & '\' & $AllFile[$i], 0, 1)
			EndIf
		Next
	EndIf
EndIf
 
Статус
Закрыто для дальнейших ответов.
Верх