Войти

Показать полную графическую версию : [решено] Получить максимальное число (в имени файла)


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

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

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

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

Creat0R
11-06-2009, 14:18
Хм, задача вроде ясна, попробуем решить:


$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
Это что-то с чем-то :clapping: Спасибо огромное! :up




© OSzone.net 2001-2012