Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
Заблокирован
1

Скрипт вывода имен файлов папки по возрастанию размера. Подскажите реализацию

18.12.2012, 20:36. Показов 3937. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var folderaddress = "C:/"; // имя папки из которой будет происходить считывание файлов
       var fso, f, fc, s = "", ar = [], obj = {}, i = 0;
       fso = new ActiveXObject("Scripting.FileSystemObject");
       f = fso.GetFolder(folderaddress);       
       fc = new Enumerator(f.files);       
       for (; !fc.atEnd(); fc.moveNext()) {
            obj[fc.item().size] = fc.item().Name;
            ar[i] = fc.item().size;
            i++;
       }
         
        ar.sort(function(a,b){return a-b;});
         
        for (i=0; i < ar.length; i++) {
            s += obj[ar[i]]+"\n";
        }
         
        WScript.Echo(s);
Собственно сам код есть, нужно добавить к нему еще и вывод размера файла, подскажите пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2012, 20:36
Ответы с готовыми решениями:

Вывод имен файлов из заданной папки в порядке возрастания их размера
Очень прошу помочь написать bat файл вывода имен файлов папки по возрастанию размера.

Написать скрипт, который бы разбирал содержимое папки (включая подпапки) по расширениям имен файлов
Коллеги, просьба помочь разобраться в ситуации. Не могу понять дальнейшие действия. Дошел до того,...

Скрипт вывода размера и прав файлов с использованием цикла for
Помогите, пожалуйста, написать скрипт с использованием цикла for, выводящий на консоль размеры и...

Копирование файлов в нужные папки, исходя из имён файлов
подскажите, задача примерно аналогичная в папке множество файлов wav, у всех в начале присутствует...

8
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
18.12.2012, 23:18 2
Лучший ответ Сообщение было отмечено как решение

Решение

Javascript
1
2
3
4
5
6
7
8
9
10
11
var fpt = 'путь к папке',
    frm = '\t\t',                                                 // разделитель
    fso = new ActiveXObject ('Scripting.FileSystemObject'),
    fld = fso.GetFolder (fpt),
    arr = new Array (),
    ind = 0,
    fil = new Enumerator (fld.files);
for (; !fil.atEnd (); fil.moveNext ())
   arr [ind++] = fil.item ().Name + frm + fil.item ().size ;
arr.sort (function (x, y) {return (x.split (frm) [1] - y.split (frm) [1])});
WScript.Echo (arr.join ('\n'));
UPDATE: путь к папке необходимо прописывать со сдвоенными обратными слешами
например, путь к системной папке system32 надо записать так:
var fpt = 'c:\\windows\\system32'
3
Эксперт JSЭксперт HTML/CSS
2435 / 1114 / 312
Регистрация: 23.06.2011
Сообщений: 3,525
19.12.2012, 07:16 3
Цитата Сообщение от kalabuni Посмотреть сообщение
путь к папке необходимо прописывать со сдвоенными обратными слешами
почему? что за причина, всегда сразу меняю слеши как раз для того чтобы не было проблем, в браузере.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
19.12.2012, 13:35 4
Цитата Сообщение от newJS Посмотреть сообщение
почему? что за причина
1) измените одну сроку моего кода
вот эту, удалив в ней свойство Name:
arr [ind++] = fil.item ().Name + frm + fil.item ().size;

2) пропишите путь к какой-либо существующей у вас на винчестере папке с файлами, вот здесь:
var fpt = 'путь к папке'
путь можете прописывать в любом виде:
- можно с одинарными прямыми слешами -- var fpt = 'c:/windows/system32'
- а можно и с обратными сдвоенными -- var fpt = 'c:\\windows\\system32'

3) сохраните это всё как file.js и запустите двойным кликом по имени файла

4) внимательно изучите вывод в системном окошке

5) в каком виде в окошке выведутся пути к файлам папки?
с прямыми слешами или с обратными?
ответ: с обратными

6) задачу, где надо узнать путь к какому-то файлу в папке 5-го уровня вложенности, а затем заменить 3-й уровень на заведомо известное имя папки, вы себе представить можете?
как вы будете решать эту задачу?
я бы решал её с помощью методов split (разделитель) и join (разделитель)
вопрос: а какой именно разделитель надо использовать - прямой слеш или обратный слеш?
ИМХО, ответ очевиден
-----

итожим: система хранит пути с обратными слешами
использовать вполне допустимое задание пути с прямыми слешами может в итоге привести вас к программному конфликту:
вам надо будет постоянно помнить - какие пути в виде строк вы ввели (с прямыми слешами) и какие пути в виде строк выдал вам ваш скрипт (с обратными слешами)
2
Заблокирован
19.12.2012, 15:01  [ТС] 5
kalabuni, Огромное спасибо ! ! ! !
0
Эксперт JSЭксперт HTML/CSS
2435 / 1114 / 312
Регистрация: 23.06.2011
Сообщений: 3,525
19.12.2012, 20:41 6
Для того чтобы не было косяка в примере шесть, сразу меняю слеши и ни какой головной боли.
Конфликты и непонятки были пока не стал менять слеши, и сразу все прошло, не надо ни чего помнить, все единообразно.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
19.12.2012, 22:28 7
ну вы реальный эгоцентрист, newJS

давайте поясню ещё раз:

вводите вы в коде переменную, равную пути к какому-то файлу на диске
var str = 'c:/folder_one/folder_two/folder_three/myfile.txt'; используя "ваши любимые" прямые слеши
предположим, стоит задача найти ВСЕ файлы с именем myfile.txt на вашем диске

находите вы их с помощью метода item () - потому что другого метода для объекта FileSystemObject просто НЕ СУЩЕСТВУЕТ

итак, перед вами массив, содержащий неизвестное количество путей к файлам, имеющим имя myfile.txt

и теперь вам надо сравнить пути к этим найденным файлам с одним единственным путём,
который вы задали изначально с прямыми слешами var str = 'c:/folder_one/folder_two/folder_three/myfile.txt';

спрашивается - как будете сравнивать?
ведь все найденные файлы - они в массиве с обратными слешами

'c:/folder_one/folder_two/folder_three/myfile.txt' - это тот же файл, что и 'c:\\folder_one\\folder_two\\folder_three\\myfile.txt'
но КАК две эти строки сравнить?
0
Эксперт JSЭксперт HTML/CSS
2435 / 1114 / 312
Регистрация: 23.06.2011
Сообщений: 3,525
20.12.2012, 07:48 8
Цитата Сообщение от kalabuni Посмотреть сообщение
спрашивается - как будете сравнивать?
Есть search, или опять же поменяю слеши, скорее всего при чтении с винта, и в массиве уже будут удобные для меня слеши.
Где проблема?
0
Заблокирован
20.12.2012, 07:50  [ТС] 9
kalabuni, newJS, да не спорьте вы !
0
20.12.2012, 07:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2012, 07:50
Помогаю со студенческими работами здесь

При удалении файлов из папки скрипт меняет дату изменения папки
Друзья, добрый день! Прошу помочь в решении моей проблемы: PowerShell удаляет файлы старше 10...

Подставление имен файлов из папки в cmd
Здравствуйте! С недавних пор осваиваю cmd много что получилось осуществить, но остались две...

Сканирование папки и подстановка имен файлов
for /f &quot;tokens=*&quot; %%a in ('Dir /b/s/a-d C:\isql.exe') Do Set isql_path=%%a set &quot;Fld=C:\Program...

Создание папки на основе частей имён файлов
Доброго времени суток. Есть задачка: В директории существует n-ое количество файлов *.mxl....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru