Войти

Показать полную графическую версию : Вывод в CMD процесса работы JS


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) После завершения может появляться сообщение о завершении скрипта.

Перерыл не один форум, ничего не нашел. В связи с чем подскажите пожалуйста ответы на вопросы:
а) Возможно ли выполнение моей идеи?
б) Возможно ли вывести процесс работы такого скрипта другим способом?

Iska
09-03-2013, 13:01
чтобы во время своей работы он мог вывести сообщения о своей работе не при помощи команд Echo с мучительным количество щелчков и подтверждений »
kosmonavtom, запускайте скрипт на исполнение при помощи хоста cscript.exe, а не wscript.exe: Running Scripts from the Command Line (http://technet.microsoft.com/en-us/library/ee156587.aspx).

kosmonavtom
10-03-2013, 10:28
Спасибо за совет, но в cmd появляется сообщение о том, что "script" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

Foreigner
10-03-2013, 10:32
"script" не является внутренней или внешней командой »
cscript

Iska
10-03-2013, 10:42
но в cmd появляется сообщение о том, что "script" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. »
запускайте скрипт на исполнение при помощи хоста cscript.exe »

Например, так:
cscript.exe //nologo "Путь\скрипт.js"

При нужде можно вовсе сменить используемый по умолчанию хост для обработки сценариев на потребный: Setting the Default Scripting Engine (http://support.microsoft.com/kb/245254/en-us).




© OSzone.net 2001-2012