kosmonavtom
09-03-2013, 10:52
Есть JS скрипт с рекурсивным обходом папок, который как Вы понимаете, может работать достаточно продолжительное время:
// 1 Взято со страницы и изменено: http://forum.oszone.net/nextnewesttothread-199998.html
// 2объект файловой системы
var fso = new ActiveXObject("Scripting.FileSystemObject");
// 4 путь к каталогу, откуда запускается скрипт
var path = WScript.ScriptFullName.substr(0, (WScript.ScriptFullName.length - WScript.ScriptName.length)),
p = fso.GetFolder(path);
var vsePapki = []; //Массив записей путей ко всем подпапкам.
var nomerProverki=0; //Количество провереных и обработанных папок.
var nomerZapisi=1; // Количество записанных папок в массив.
//12 Вызываем рекурсивную функцию
sFolders(path);
//14 Рекурсивная функция перебора всех папок и подпапок
function sFolders(folder)//полный путь
{
// 17 доступ к объекту-папке
var root = fso.GetFolder(folder);
// 19 Коллекция подпапок
var sfCount = root.SubFolders.Count;
// 21 последовательность подпапок
var seq = new Enumerator(root.SubFolders);
// WScript.Echo("\nКоличество подпапок в корневой папке (" + root + ") = " + sfCount);
// 24 если в текущей папке есть подпапки, то вызываем функцию для каждой подпапки рекурсивно.
while (sfCount>0)
{
for(; !seq.atEnd(); seq.moveNext())
{
// WScript.Echo("Путь к подпапке = " + seq.item().path);
vsePapki[nomerZapisi] = seq.item().path;
nomerZapisi=nomerZapisi+1; // Количество записей в массиве адресов
}
nomerProverki=nomerProverki+1;
WScript.Echo("Номер проверки = " + nomerProverki + " Номер записи = " + [nomerZapisi-1]);
if (nomerProverki>=nomerZapisi)
{
sfCount = 0;
}
else
{
WScript.Echo("ПАПКА НА ПРОВЕРКУ = " + vsePapki[nomerProverki]);
sfCount = sfCount - 1;
sFolders(vsePapki[nomerProverki]);
}
}
}
нужно, чтобы во время своей работы он мог вывести сообщения о своей работе не при помощи команд Echo с мучительным количество щелчков и подтверждений а через cmd. Поэтому я нашел еще обратный JS скрипт, который вводит в cmd команду, а потом забирает от туда данные, так вот нужно чтобы было наоборот.
var wsh = new ActiveXObject("WScript.Shell");
var cmd = wsh.Exec("cmd /c dir C:\ /on");
while (cmd.Status === 0) {
WScript.Sleep(100);
}
var output = cmd.StdOut.ReadAll();
WScript.Echo(output);
ВНИМАНИЕ для чайников! Оба скрипта можно проверить на Windows XP/7 (остальные не пробовал) записав их в файл вида *.js и запустив его.
Идея у меня была такая:
1) Во время работы скрипта открывается окно cmd
2) В открытое окно cmd от скрипта поочередно выводятся адреса тех папок которые обрабатываются в данный момент. (или другая информация о ходе работы)
3) После завершения может появляться сообщение о завершении скрипта.
Перерыл не один форум, ничего не нашел. В связи с чем подскажите пожалуйста ответы на вопросы:
а) Возможно ли выполнение моей идеи?
б) Возможно ли вывести процесс работы такого скрипта другим способом?
// 1 Взято со страницы и изменено: http://forum.oszone.net/nextnewesttothread-199998.html
// 2объект файловой системы
var fso = new ActiveXObject("Scripting.FileSystemObject");
// 4 путь к каталогу, откуда запускается скрипт
var path = WScript.ScriptFullName.substr(0, (WScript.ScriptFullName.length - WScript.ScriptName.length)),
p = fso.GetFolder(path);
var vsePapki = []; //Массив записей путей ко всем подпапкам.
var nomerProverki=0; //Количество провереных и обработанных папок.
var nomerZapisi=1; // Количество записанных папок в массив.
//12 Вызываем рекурсивную функцию
sFolders(path);
//14 Рекурсивная функция перебора всех папок и подпапок
function sFolders(folder)//полный путь
{
// 17 доступ к объекту-папке
var root = fso.GetFolder(folder);
// 19 Коллекция подпапок
var sfCount = root.SubFolders.Count;
// 21 последовательность подпапок
var seq = new Enumerator(root.SubFolders);
// WScript.Echo("\nКоличество подпапок в корневой папке (" + root + ") = " + sfCount);
// 24 если в текущей папке есть подпапки, то вызываем функцию для каждой подпапки рекурсивно.
while (sfCount>0)
{
for(; !seq.atEnd(); seq.moveNext())
{
// WScript.Echo("Путь к подпапке = " + seq.item().path);
vsePapki[nomerZapisi] = seq.item().path;
nomerZapisi=nomerZapisi+1; // Количество записей в массиве адресов
}
nomerProverki=nomerProverki+1;
WScript.Echo("Номер проверки = " + nomerProverki + " Номер записи = " + [nomerZapisi-1]);
if (nomerProverki>=nomerZapisi)
{
sfCount = 0;
}
else
{
WScript.Echo("ПАПКА НА ПРОВЕРКУ = " + vsePapki[nomerProverki]);
sfCount = sfCount - 1;
sFolders(vsePapki[nomerProverki]);
}
}
}
нужно, чтобы во время своей работы он мог вывести сообщения о своей работе не при помощи команд Echo с мучительным количество щелчков и подтверждений а через cmd. Поэтому я нашел еще обратный JS скрипт, который вводит в cmd команду, а потом забирает от туда данные, так вот нужно чтобы было наоборот.
var wsh = new ActiveXObject("WScript.Shell");
var cmd = wsh.Exec("cmd /c dir C:\ /on");
while (cmd.Status === 0) {
WScript.Sleep(100);
}
var output = cmd.StdOut.ReadAll();
WScript.Echo(output);
ВНИМАНИЕ для чайников! Оба скрипта можно проверить на Windows XP/7 (остальные не пробовал) записав их в файл вида *.js и запустив его.
Идея у меня была такая:
1) Во время работы скрипта открывается окно cmd
2) В открытое окно cmd от скрипта поочередно выводятся адреса тех папок которые обрабатываются в данный момент. (или другая информация о ходе работы)
3) После завершения может появляться сообщение о завершении скрипта.
Перерыл не один форум, ничего не нашел. В связи с чем подскажите пожалуйста ответы на вопросы:
а) Возможно ли выполнение моей идеи?
б) Возможно ли вывести процесс работы такого скрипта другим способом?