Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Получить максимальное число (в имени файла) (http://forum.oszone.net/showthread.php?t=142431)

D_Master 11-06-2009 13:09 1140904

Получить максимальное число (в имени файла)
 
Доброго времени суток!
Столкнулся с проблемой - не имею понятия, как получить максимально существующее число в имени файла.
Поясню:
C:\folder1\ - исходная папка
C:\folder2\ - конечная папка

В исходной папке время от времени появляются новые папки, имена которых имеют подобный вид: 7983_1128. Два номера между собой не связаны, но оба значения увеличиваются.
Затем, в этих папках есть текстовые файлы, в имени которых так же, присутствуют только цифры (три знака).

Необходимо:
получить максимальное число папки (по первому числу, т.е., 4 знака до "_"), а затем, в этой папке, получить имя файла с максимальным числом (123.txt, к примеру) и скопировать этот файл в папку C:\folder2\.

Буду рад любым советам :)

Creat0R 11-06-2009 14:18 1140966

Хм, задача вроде ясна, попробуем решить:

Код:

$sSource_Folder = "C:\Folder1"
$sDest_Folder = "C:\Folder2"

$sFolderName = _SearchFile_Proc($sSource_Folder, "*", 0)
$sFileName = _SearchFile_Proc($sSource_Folder & "\" & $sFolderName, "*.txt", 1)

If @error Then Exit MsgBox(48, "Error", "There was an error - no files to copy.")

$sSource_File = $sSource_Folder & "\" & $sFolderName & "\" & $sFileName
$sDest_File
= $sDest_Folder & "\" & $sFileName

MsgBox(64, "Results", _
    StringFormat("File found:\n%s\n\nNow we copy this file to destination path:\n%s", $sSource_File, $sDest_File))

FileCopy($sSource_File, $sDest_File, 8+1)

Func _SearchFile_Proc($sPath, $sMask, $iMode=0)
    Local $sRet_Name = "", $nNumber = 0, $nLast_Number = 0
    Local $hSearch, $sNext_FileName

    $hSearch
= FileFindFirstFile($sPath & "\" & $sMask)
    If $hSearch = -1 Then Return SetError(1, 0, "")

    While 1
        $sNext_FileName = FileFindNextFile($hSearch)
        If @error Then ExitLoop

        If
$iMode = 0 Then
            If Not
StringInStr(FileGetAttrib($sPath & "\" & $sNext_FileName), "D") Then ContinueLoop

            $nNumber = Number(StringLeft($sNext_FileName, StringInStr($sNext_FileName, "_")-1))
        Else
            $nNumber = Number(StringTrimRight($sNext_FileName, 4))
        EndIf

        If
$nNumber > $nLast_Number Then
            $sRet_Name = $sNext_FileName
            $nLast_Number
= $nNumber
        EndIf
    WEnd


    FileClose($hSearch)

    If $sRet_Name = "" Then Return SetError(2, 0, "")
    Return $sRet_Name
EndFunc

Я так понял нужно копировать только файл, без структуры каталогов? Если нужны и каталоги, то в строчке создания переменной «$sDest_File» нужно добавить « & "\" & $sFolderName» после «$sDest_Folder».

D_Master 11-06-2009 19:03 1141168

Это что-то с чем-то :clapping: Спасибо огромное! :up


Время: 01:15.

Время: 01:15.
© OSzone.net 2001-