Member
Статус: Не в сети Регистрация: 01.09.2005 Откуда: г. Люберцы
Необходимо на JS написать скрипт.
Задание такое:
Найти 10 файлов с наибольшим размером в указанной папке и её подпапках.
Соответственно вывести их на экран. Путь к папке дожен передаваться через параметры.
Сделано:
Реализовал функцию + алгоритм сортировки и вывода на экран.
Косяки:
Почему-то в массив пишутся только файлы из папки, без файлов их подпапок (косяк функции).
Необходимо реализовать передачу пути к папке в функцию( на стадии тестирования).
Сам скрипт (по умолчанию стоит путь А:\ ):
Код:
var k = 0, n, arg, all, all2; all = new Array(); all2= new Array(); arg = WScript.Arguments; FSO = WScript.CreateObject("Scripting.FileSystemObject");
function ShowFolder(fso, FolderName,a, mas){ var fld, en, aaa,s; mas = new Array(); //WScript.Echo(FolderName);
try { fld = fso.GetFolder(FolderName); } catch(e) { WScript.Echo(e); return; } en = new Enumerator(fld.SubFolders); for (; !en.atEnd(); en.moveNext()) { CurrentFolder = en.item(); ShowFolder(fso, FolderName + "\\" + CurrentFolder.Name, s , mas);
} en = new Enumerator(fld.Files); for (; !en.atEnd(); en.moveNext()) { FileName = en.item().Name; aaa =en.item(); mas[a] = aaa; a++; s = mas.length; //WScript.Echo(aaa); //WScript.Echo(FolderName + "\\" + FileName); } return mas; } all = ShowFolder(FSO, "A:",k,all2); n=all.length; //WScript.Echo(n); size = new Array(); pth = new Array(); tmp = Array (n); for (i = 0; i < n; i++){ //WScript.Echo (all[i]); } for (i = 0; i < n; i++) { if (all[i] != null) { size[i] = all[i].Size;
pth[i] = all[i].Path; } } for (i = 0; i < n; i++) tmp[i] = i; for (i = 0; i < n; i++){ //WScript.Echo (size[i]); //WScript.Echo (pth[i]); } for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (size[j] > size[i]) { a = tmp[i]; tmp[i] = tmp[j]; tmp[j] = a;
Member
Статус: Не в сети Регистрация: 01.09.2005 Откуда: г. Люберцы
Owl83 писал(а):
Замечание номер раз. На кой ты поместил создание массива внутрь рекурсивной функции?
Замечание номер два Можно было вообще не заморачиваться насчет передачи длины массива через параметр функции.
Спасибо большое за помощь! Только вот с этим он ни как не хотел работать:
Код:
catch(e) { document.write(e); return; }
Говорит не знает что такое "document"
Вот финальный вариант скрипта, кому нужен юзайте :
Код:
ARGUM = WScript.Arguments; var i = 0; function FindAll(fso, FolderName, All) { var fld, en; try { fld = fso.GetFolder(FolderName); } catch(e) { WScript.Echo(e); return; } en = new Enumerator(fld.SubFolders); for (; !en.atEnd(); en.moveNext()) { CurrentFolder = en.item(); FindAll(fso, FolderName + "\" + CurrentFolder.Name, All); } en = new Enumerator(fld.Files); for (; !en.atEnd(); en.moveNext()) { All.push(en.item()); } return All; }
All = new Array; FSO = FSO = WScript.CreateObject("Scripting.FileSystemObject"); FindAll(FSO, ARGUM.item(0), All); L = All.length; mas = new Array(); pth = new Array(); tmp = Array (L);
for (i = 0; i < L; i++) { if (All[i] != null) {
mas[i] = All[i].Size;
pth[i] = All[i].Path; } }
for (i = 0; i < L; i++) { tmp[i] = i; }
for (i = 0; i < L - 1; i++) { for (j = i + 1; j < L; j++) { if (mas[j] > mas[i]) { a = tmp[i]; tmp[i] = tmp[j]; tmp[j] = a;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения