Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Вывод в CMD процесса работы JS (http://forum.oszone.net/showthread.php?t=255846)

kosmonavtom 09-03-2013 10:52 2107230

Вывод в CMD процесса работы JS
 
Есть 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 2107297

Цитата:

Цитата kosmonavtom
чтобы во время своей работы он мог вывести сообщения о своей работе не при помощи команд Echo с мучительным количество щелчков и подтверждений »

kosmonavtom, запускайте скрипт на исполнение при помощи хоста cscript.exe, а не wscript.exe: Running Scripts from the Command Line.

kosmonavtom 10-03-2013 10:28 2107793

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

Foreigner 10-03-2013 10:32 2107797

Цитата:

Цитата kosmonavtom
"script" не является внутренней или внешней командой »

cscript

Iska 10-03-2013 10:42 2107803

Цитата:

Цитата kosmonavtom
но в cmd появляется сообщение о том, что "script" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. »

Цитата:

Цитата Iska
запускайте скрипт на исполнение при помощи хоста cscript.exe »

Например, так:
Код:

cscript.exe //nologo "Путь\скрипт.js"
При нужде можно вовсе сменить используемый по умолчанию хост для обработки сценариев на потребный: Setting the Default Scripting Engine.


Время: 08:54.

Время: 08:54.
© OSzone.net 2001-