AlexTurist
Новичок
- Сообщения
- 13
- Репутация
- 1
Здравствуйте. Помогите пожалуйста разобраться, а то я запутался совсем. Имеется папка с фаилами мне необходимо из этой папки найти все файлы с расширением *.img, далее с мне нужно что бы скрипт мерил вес каждого фаила и когда он доходит до нужного мне веса (который я задаю сам руками) записывает это в bat фаил, например у меня лежит 1000 фаилов img весом от 20 мб до 200 мб мне нужно что бы их общий вес был не больше 1500 мб (в примере ниже указан вес 25912255кб т.к. для теста были взяты мелкие фаилы) и это записалось в *.bat фаил с определенными параметрами (они почти одинаковые), потом он мерит следующие фаилы и записывает в этот же фаил на новую строчку следующий список и так пока не закончатся все фаилы. Вот что мне удалось сделать и как я планировал: с помощью функции
я собираю *.img фаилы в массив, затем я написал функцию которая мерит каждый фаил и плюсует их вес и в качестве ответа возвращает сколько фаилов в сумме дают нужный мне вес (заданный в функции)
Затем функцию которая записывает это в *.bat фаил
дальше идея была в том что бы смотреть какой длинны вышел массив и и на его основе создать нужное количество циклов, но для теста сделал только 4 итерации, в итоге весь код выглядит так:
И в bat фаиле получается
а учитывая вес каждого img в тестовой сборке (во вложении скриншот с названиями и весом фаилов ) должно быть так:
В идеале последней строчки gmt -j -o gmapsup4.img -m "Ya kakaya to karta" не надо. И вот сижу и не понимаю как это зациклить так что бы он выдал нужный мне результат. Извиняюсь если написал сумбурно, старался расписать все по полочкам
Код:
Func _FindFiles($sRoot, $sFile)
Local $FileList
$FileList = _FileListToArray($sRoot, $sFile, 1)
If Not @error Then
For $i = 1 To $FileList[0]
ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)
Next
EndIf
Return $FileList
$FileList = _FileListToArray($sRoot, '*', 2)
If Not @error Then
For $i = 1 To $FileList[0]
_FindFiles($sRoot & '\' & $FileList[$i], $sFile)
Next
EndIf
EndFunc
я собираю *.img фаилы в массив, затем я написал функцию которая мерит каждый фаил и плюсует их вес и в качестве ответа возвращает сколько фаилов в сумме дают нужный мне вес (заданный в функции)
Код:
Func _SizeArray ($MaxSize, $array, $NumberArray)
Local $counter = 0
Local $TempSize = 0
For $i = $NumberArray To $array[0] Step 1
$TempSize = $TempSize+FileGetSize ($array[$i])
$counter = $counter + 1
If $TempSize > $MaxSize Then
$TempSize = $TempSize - FileGetSize ($array[$i])
$counter = $counter - 1
ExitLoop
EndIf
Next
Return $counter
EndFunc
Затем функцию которая записывает это в *.bat фаил
Код:
Func _write_bat ($array_map, $Start, $End, $NameMap, $NumberGMAPsupp)
FileWrite ( "1.bat", "gmt -j -o gmapsup" & $NumberGMAPsupp & ".img ")
For $i = $start To $End Step 1
FileWrite ( "1.bat", $array_map[$i] & " ")
Next
FileWrite ( "1.bat", " -m " & $NameMap & @crlf)
EndFunc
дальше идея была в том что бы смотреть какой длинны вышел массив и и на его основе создать нужное количество циклов, но для теста сделал только 4 итерации, в итоге весь код выглядит так:
Код:
#Include <File.au3>
#include <Array.au3>
$TempCounterArray = 0
Global $NumberGMAPsupp = 0
Global $FileList
$NameMap = '"Ya kakaya to karta"'
$start = 1
$StartArray = 1
$array_answer = _FindFiles(@ScriptDir, '*.img')
For $X = 0 to 4 Step 1
$Quantity_File_In_Array = _SizeArray (25912255, $array_answer, $StartArray) ; $StartArray - c какого массива начать, возвращаем количество файлов до указанного размера
_write_bat ($array_answer, $StartArray, $Quantity_File_In_Array, $NameMap, $NumberGMAPsupp)
$NumberGMAPsupp = $NumberGMAPsupp + 1
$StartArray = $StartArray + $Quantity_File_In_Array
Next
Func _write_bat ($array_map, $Start, $End, $NameMap, $NumberGMAPsupp)
FileWrite ( "1.bat", "gmt -j -o gmapsup" & $NumberGMAPsupp & ".img ")
For $i = $start To $End Step 1
FileWrite ( "1.bat", $array_map[$i] & " ")
Next
FileWrite ( "1.bat", " -m " & $NameMap & @crlf)
EndFunc
Func _SizeArray ($MaxSize, $array, $NumberArray)
Local $counter = 0
Local $TempSize = 0
For $i = $NumberArray To $array[0] Step 1
$TempSize = $TempSize+FileGetSize ($array[$i])
$counter = $counter + 1
If $TempSize > $MaxSize Then
$TempSize = $TempSize - FileGetSize ($array[$i])
$counter = $counter - 1
ExitLoop
EndIf
Next
Return $counter
EndFunc
Func _FindFiles($sRoot, $sFile)
Local $FileList
$FileList = _FileListToArray($sRoot, $sFile, 1)
If Not @error Then
For $i = 1 To $FileList[0]
ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)
Next
EndIf
Return $FileList
$FileList = _FileListToArray($sRoot, '*', 2)
If Not @error Then
For $i = 1 To $FileList[0]
_FindFiles($sRoot & '\' & $FileList[$i], $sFile)
Next
EndIf
EndFunc
gmt -j -o gmapsup0.img 37500000.img 37500001.img -m "Ya kakaya to karta"
gmt -j -o gmapsup1.img 37500002.img 37500003.img 37500004.img 37500005.img 37500006.img -m "Ya kakaya to karta"
gmt -j -o gmapsup2.img 37500011.img 37500026.img 37500027.img -m "Ya kakaya to karta"
gmt -j -o gmapsup3.img -m "Ya kakaya to karta"
gmt -j -o gmapsup4.img -m "Ya kakaya to karta"
gmt -j -o gmapsup1.img 37500002.img 37500003.img 37500004.img 37500005.img 37500006.img -m "Ya kakaya to karta"
gmt -j -o gmapsup2.img 37500011.img 37500026.img 37500027.img -m "Ya kakaya to karta"
gmt -j -o gmapsup3.img -m "Ya kakaya to karta"
gmt -j -o gmapsup4.img -m "Ya kakaya to karta"
gmt -j -o gmapsup0.img 37500000.img 37500001.img -m "Ya kakaya to karta"
gmt -j -o gmapsup1.img 37500002.img 37500003.img 37500004.img 37500005.img 37500006.img 37500007.img 37500008.img -m "Ya kakaya to karta"
gmt -j -o gmapsup2.img 37500011.img 37500026.img 37500027.img 37500028.img 37500029.img 37500030.img 37500031.img 37500032.img 37500033.img 37500034.img 37500035.img 37500036.img -m "Ya kakaya to karta"
gmt -j -o gmapsup3.img 37500037.img 37500038.img 37500039.img 37500040.img -m "Ya kakaya to karta"
gmt -j -o gmapsup4.img -m "Ya kakaya to karta"
gmt -j -o gmapsup1.img 37500002.img 37500003.img 37500004.img 37500005.img 37500006.img 37500007.img 37500008.img -m "Ya kakaya to karta"
gmt -j -o gmapsup2.img 37500011.img 37500026.img 37500027.img 37500028.img 37500029.img 37500030.img 37500031.img 37500032.img 37500033.img 37500034.img 37500035.img 37500036.img -m "Ya kakaya to karta"
gmt -j -o gmapsup3.img 37500037.img 37500038.img 37500039.img 37500040.img -m "Ya kakaya to karta"
gmt -j -o gmapsup4.img -m "Ya kakaya to karta"
Сообщение автоматически объединено: