Что нового

Поиск папки с наибольшим именем и ее открытие

Small-Poni

Новичок
Сообщения
4
Репутация
1
Доброго дня.
Достаточно тривиальная задача, но она все-таки смогла поставить меня в тупик.

Есть папка, в которой все папки имеют численные имена(3094,4321,....etc). Нужно открыть папку с максимальным числовым номером и в ней открыть подпапку "release"(и после скопировать от туда файл)

Подскажите?

мозг к концу рабочего дня совсем не соображает :-[
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
открыть не есть осмысленная операция (в терминах autoit ему можно сопоставить простую смену рабочего каталога).
а вот скопировать откуда-то куда-то файл - есть операция. как раз про нее ты что-то мало инфы дал.
ну значит буду мучать свой хрустальный шар. и так
Код:
#include <File.au3>
$sFolder = 'Путь до папки в которой находятся остальные папки'
$sCopyPath = 'Путь куда надо скопировать файл'
$aFolderlist = _FileListToArray($sFolder, '*', 2)
$nMax = 0
For $i = 1 to $aFolderlist[0]; Поиск максимума
	If Number($aFolderlist[$i]) >= $nMax Then
		$nMax = Number($aFolderlist[$i])
		$sMax = $aFolderlist[$i]
	EndIf
Next
FileCopy($sFolder & '\' $sMax & '\release\somefiletocopy.ext', $sCopyPath)

детали додумаешь сам
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Kaster [?]
открыть не есть осмысленная операция
Ну почему, открыть видимо значит сделать так:
Код:
ShellExecute($sFolder & '\' $sMax)

:smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
CreatoR сказал(а):
Kaster [?]
открыть не есть осмысленная операция
Ну почему, открыть видимо значит сделать так:
Код:
ShellExecute($sFolder & '\' $sMax)

:smile:
да. но я не думаю что в этом есть какой-то толк ;D
сидеть и смотреть как открываются папки, когда что-то куда-то копируется.
помнится был такой вирус, открывает папки и медленно начинает удалять его содержимое, в рекурсивном режиме. и так пока не удалит все на диске, включая все не занятые системные файлы, и все это на глазах хозяина компа :rofl:
 

alexnasa

Новичок
Сообщения
48
Репутация
0
Да простят меня присутствующие.. у меня почему-то не сработало
Код:
ShellExecute($sFolder & '\' $sMax)

А мне как раз именно открыть и надо бы
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
alexnasa
как именно не сработало? ошибку показало?
 

alexnasa

Новичок
Сообщения
48
Репутация
0
в корне диска C: создал папку "99" в ней 4 шт папок (1;2;3 и 4) в четвертую положил файл 1.txt
и файлкопи -еррор пишет и шелл-екзекьют тоже еррор ( AutoIt Version: 3.3.6.0)

Код:
#include <File.au3>
$sFolder = 'C:\99'
$sCopyPath = 'C:\'
$aFolderlist = _FileListToArray($sFolder, 2)
$nMax = 0
For $i = 1 to $aFolderlist[0]; Поиск максимума
    If Number($aFolderlist[$i]) >= $nMax Then
        $nMax = Number($aFolderlist[$i])
        $sMax = $aFolderlist[$i]
    EndIf
Next
FileCopy($sFolder & '\' $sMax & '\1.txt', $sCopyPath)
ShellExecute($sFolder & '\' $sMax)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
alexnasa
второй параметр в _FileListToArray - это маска, а не флаг. внимательнее читаем справку.
 

alexnasa

Новичок
Сообщения
48
Репутация
0
Я просто взял готовый код (здесь) и прописал пути
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
alexnasa
да. это оказ-ся мои же "пара строк", правда годовалой давности. вобщем, второй аргумент - это маска.
 

alexnasa

Новичок
Сообщения
48
Репутация
0
Почему-то не работает.. Создал демо-папки в них положил папки с именами 1-2-3-4, в которых уже в каждой лежит папка release а в ней файл somefiletocopy.ext Тем не менее "Line 6 (File "С:\Поиск папки с наибольшим именем и ее открытие.аиЗ"):
For $1 = 1 to $aFolderlist[0]
For $i = 1 to $aFolderlistrt ERROR
Error: Subscript used with non-Array variable."
Код:
#include <File.au3>
$sFolder = 'd:\targetfolder'
$sCopyPath = 'd:\destfolder'
$aFolderlist = _FileListToArray('*', 2) ;_FileListToArray($sPath[,$iFlag=0])
$nMax = 0
For $i = 1 to $aFolderlist[0]; Поиск максимума
    If Number($aFolderlist[$i]) >= $nMax Then
        $nMax = Number($aFolderlist[$i])
        $sMax = $aFolderlist[$i]
    EndIf
Next
FileCopy($sFolder & '\' $sMax & '\release\somefiletocopy.ext', $sCopyPath)

Куда бы копать?
 

alexnasa

Новичок
Сообщения
48
Репутация
0
Спасибо! Заработало! Но почему-то файл берёт в папке по имени "2" (их четыре 1-2-3-4)
 

aleratorio

Осваивающий
Сообщения
85
Репутация
42
alexnasa сказал(а):
Спасибо! Заработало! Но почему-то файл берёт в папке по имени "2" (их четыре 1-2-3-4)
Не знаю. У себя сделал папки 1, 3, 6, 9 - берет из 9-ой
 

alexnasa

Новичок
Сообщения
48
Репутация
0
А я 1-2-3-4-5-6-7-8 сделал, но все равно предпочитает вторую
Код:
#include <File.au3>
$sFolder = 'd:\targetfolder'
$sCopyPath = 'd:\destfolder'
;$aFolderlist = _FileListToArray('*', 2) ;_FileListToArray($sPath[,$iFlag=0])

$aFolderlist = _FileListToArray($sFolder, 2)

$nMax = 0
For $i = 1 to $aFolderlist[0]; Поиск максимума
    If Number($aFolderlist[$i]) >= $nMax Then
        $nMax = Number($aFolderlist[$i])
        $sMax = $aFolderlist[$i]
    EndIf
Next
FileCopy($sFolder & '\' & $sMax & '\release\somefiletocopy.txt', $sCopyPath)
ShellExecute($sFolder & '\' & $sMax)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
alexnasa
Код:
$aFolderlist = _FileListToArray($sFolder, 2)
Прочитайте в справке про аргументы этой функции. У Вас маска "2". Надо
Код:
$aFolderlist = _FileListToArray($sFolder, '*', 2)
 

alexnasa

Новичок
Сообщения
48
Репутация
0
Спасибо! Все работает!
Код:
$aFolderlist = _FileListToArray($sFolder, '*', 2)

Интерес вот какой.. заставить код рыть все глубже и глубже внутрь поддиректорий, заходя в самые старшие имена, и далее находя в них так же старшее имя, до тех пор, пока поддиректории закончатся внутри и далее идти уже станет некуда.Достигнув дна колодца нужно открыть эту конечную в древе папку.
 

aleratorio

Осваивающий
Сообщения
85
Репутация
42
alexnasa сказал(а):
Интерес вот какой.. заставить код рыть все глубже и глубже внутрь поддиректорий, заходя в самые старшие имена, и далее находя в них так же старшее имя, до тех пор, пока поддиректории закончатся внутри и далее идти уже станет некуда.Достигнув дна колодца нужно открыть эту конечную в древе папку.
При таком раскладе - в папке есть директория 9 а в ней 1 и 2, то какя считается старшей 9 или 2?
 

alexnasa

Новичок
Сообщения
48
Репутация
0
Если в папке 9 есть папки 1-2-3 то интересует 3 (если в ней других папок нет, то её надо открыть, а если есть в ней папки то по тому же алгоритму открыть старшую в ней папку)
 

aleratorio

Осваивающий
Сообщения
85
Репутация
42
так, а если есть папки 1 и 2(на одном уровне), в первой есть папка 5, а во второй 3, то нужна результатирующая - 5 или 3?
 
Верх