Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вывод сообщений в cdm от рекурсивной функции (https://javascript.ru/forum/events/36200-vyvod-soobshhenijj-v-cdm-ot-rekursivnojj-funkcii.html)

kosmonavtom 07.03.2013 11:07

Вывод сообщений в cdm от рекурсивной функции
 
Есть скрипт с рекурсивным обходом папок, который как Вы понимаете, может работать достаточно продолжительное время, и с ним все в порядке так вот нужно, чтобы во время своей работы он мог вывести сообщения о своей работе. Идея у меня была такая:
1) Во время работы скрипта открывается окно cmd
2) В открытое окно cmd от скрипта поочередно выводятся адреса тех папок которые обрабатываются в данный момент. (или другая информация о ходе работы)
3) После завершения может появляться сообщение о завершении скрипта.

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

cyber 07.03.2013 12:45

kosmonavtom, причем командная строка в js форуму?:blink:

kosmonavtom 07.03.2013 12:54

Можно чайнику сказать конкретнее: "Из JS вывести в CMD нельзя!" - как тогда? Никак...

cyber 07.03.2013 13:01

kosmonavtom, конечно нельзя так как js не имеет доступ к ресурсам системы он ограничевается браузером.

kosmonavtom 07.03.2013 15:02

Спасибо! Значит судя по Вашей логике, единственный путь вывести ход выполнения моего скрипта это записать его в код веб-страницы и запускать через браузер? Или можно допустим все-таки создать bat файл и запустить скрипт через бат, а он уже сможет выводить в cmd? (ладно посмотрю это на форуме про bat файлы - просто боюсь, что они мне так-же ответят в духе "...что за js на bat форуме..."

kosmonavtom 07.03.2013 15:22

cyber,
Вот нашел функцию которая запрашивает данные из 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);

cyber 07.03.2013 17:06

kosmonavtom, работает только в ие, я не уточнил это касаеться всех браузеров кроме ие.
Цитата:

конечно нельзя так как js не имеет доступ к ресурсам системы он ограничевается браузером.

cyber 07.03.2013 17:07

Цитата:

Сообщение от kosmonavtom (Сообщение 239297)
Спасибо! Значит судя по Вашей логике, единственный путь вывести ход выполнения моего скрипта это записать его в код веб-страницы и запускать через браузер? Или можно допустим все-таки создать bat файл и запустить скрипт через бат, а он уже сможет выводить в cmd? (ладно посмотрю это на форуме про bat файлы - просто боюсь, что они мне так-же ответят в духе "...что за js на bat форуме..."

можно написать расширение для браузеров..

kosmonavtom 07.03.2013 19:44

cyber, не понимаю при чем тут браузеры, мне скрипт нужен чисто для Windows и работает он у меня на любом компьютере с этой операционной системой не зависимо от установленных браузеров в виде отдельного файла. И в итоге вводит команду в cmd и забирает полученные данные оттуда, и мне нужно точно так-же только наоборот... Т.е. запустить скрипт из bat и получить выходные данные от скрипта в cmd. Твоя cyber точка зрения мне ясна - повторять два раза не нужно было. Хочется просто услышать и мнения других Профессоров. Заранее спасибо.

cyber 07.03.2013 19:59

kosmonavtom, я с батниками работал но давно но что то еще помню, я просто не могу понять что нужно и причем тут Js.

rgl 07.03.2013 20:28

Рекомендую ознакомиться со следующими книгами:
Гюнтер Борн "Руководство разработчика на Microsoft Windows Script Host"
Андрей Попов "Windows Script Host для Windows 2000, XP"

kosmonavtom 07.03.2013 23:14

cyber, js рекурсивно работает с папками и заменяет свойства ярлыков в них. И теперь просто осталось вывести ход работы этого js - можно и не в cmd. Понимаю, что данную функцию можно было написать и программно допустим в Си, но мне было интересно именно в js

kosmonavtom 07.03.2013 23:24

rgl, спасибо за рекомендацию, но обычно если набрать какой либо вопрос в Интернете то гораздо более понятней из готовых кодов как работает язык.

cyber 08.03.2013 00:22

kosmonavtom, я в тупую не могу понять как вы выполняете js скрипт через cmd и темболее меняете свойства, может vbscript

kosmonavtom 08.03.2013 10:18

cyber, ну как же? В js можно создавать текстовые файлы, в js можно запускать bat файлы, так почему в одном js скрипте-файле не создать bat файл, а потом соответственно не запустить его? или тоже самое не сделать только с vbscript??? таким образом и связать и одно и другое и третье...

rgl 08.03.2013 11:19

kosmonavtom,
1. Ваш вопрос говорит о том, что вы не знаете простейших вещей при программировании на JS не для браузера
2. Найти что-либо в интернете или задать вопрос и получить ответ практически невозможно. Вам лишь будут пытаться объяснить, что, мол, "JS вне браузера не бывает"
3. Выводить всякую информацию (в т.ч. имя папки) на консоль можно разными способами, простейший
WScript.Echo( s );
где s - строковая переменная, содержащая то, что хотите вывести. Запускайте скрипт командой:
cscript filename.js
или поменяйте настройки, чтобы скрипт по умолчанию запускался в консольном режиме, напр, так:
cscript //H:cscript
(два слэша - существенно)

cyber,
Все, что можно сделать на VBScript можно и на JScript, он не только ничем не хуже, а даже лучше :-)

kosmonavtom 08.03.2013 11:50

Цитата:

1. Ваш вопрос говорит о том, что вы не знаете простейших вещей при программировании на JS не для браузера...
rgl, похоже именно как раз Вы не вникли абсолютно в проблему! Мне не нужен однократный вывод одного сообщения, которое Вы описали и которое я конечно знаю, а мне нужно в процессе рекурсии выводить процесс её работы. Простым Echo не обойтись.

kosmonavtom 08.03.2013 12:04

Короче вот рекурсивный скрипт. Чтобы проверить его работу запишите его в любой файл *.js, поместите в папку где не очень много подпапок, Далее запустите его и вы замучаетесь щелкать появляющиеся Echo. Так вот мне нужно чтобы это было не ЕХО, а что-то другое, что позволяло бы продолжать работу скрипта без щелчков мыши. Можете посоветовать?

// 1 Взято но не рабочее с сайта: [url]http://forum.oszone.net/nextnewesttothread-199998.html[/url]
// 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]);
		
		}
	
	}
 
}

rgl 08.03.2013 15:25

Цитата:

Сообщение от kosmonavtom
и вы замучаетесь щелкать появляющиеся Echo

Если делать как я сказал, Echo будет выводить информацию не в модальное окно а в консоль, и ничего щелкать не нужно:
Цитата:

Сообщение от rgl
Запускайте скрипт командой:
cscript filename.js
или поменяйте настройки, чтобы скрипт по умолчанию запускался в консольном режиме, напр, так:
cscript //H:cscript


rgl 08.03.2013 15:35

kosmonavtom,
Нехорошо как то. Я ответил на ваш вопрос, ваш скрипт, если запускать его так, как я написал, выводит информацию на консоль, а вы, не дочитавши мой ответ до конца, минусики кликаете, мол, не по теме.

kosmonavtom 08.03.2013 16:27

rgl, нехорошо в книжки вместо ответов отправлять... тогда и кликал!

cyber 08.03.2013 16:50

Цитата:

Сообщение от kosmonavtom (Сообщение 239493)
rgl, нехорошо в книжки вместо ответов отправлять... тогда и кликал!

-1.

cyber 08.03.2013 16:51

Цитата:

Сообщение от kosmonavtom (Сообщение 239493)
rgl, нехорошо в книжки вместо ответов отправлять... тогда и кликал!

Лови -

kosmonavtom 08.03.2013 17:25

спасибо, очень прелесный форум. Можете еще накидать, а то мало что-то! :) Главное занятие нашли себе вместо js Хорошее...

cyber 08.03.2013 19:18

kosmonavtom,ага, мы сидим тут и "-" кидаем.

rgl 08.03.2013 23:34

Цитата:

Сообщение от kosmonavtom (Сообщение 239493)
rgl, нехорошо в книжки вместо ответов отправлять... тогда и кликал!

1. То, что я "отправил к книжке" не помешало мне чуть позже дать ответ без книжки. Вопрос ваш я прочитал в конце дня 7 марта, когда пьют даже трезвенники и язвенники, поэтому ждать немедленного ответа на вопрос нельзя.
2. Раньше я тоже отвечал на разные вопросы на форуме, иногда по делу, иногда нет, иногда грамотно, иногда не очень. Но к книжкам никого не отправлял. Причина - есть много разных книг, в которых можно найти информацию. Можно спорить и обсуждать, какая из книг хорошая, какая - не очень, какая - для новичков, какая - для продвинутых. Есть много сайтов с информацией, много форумов, на которых можно задать вопрос и получить ответ. Все это, если говорить про JavaScript внутри браузера. Но если говорить о программировании вне браузера, ситуация меняется - нет хороших и плохих книг - нет никаких! Нельзя найти информацию на сайтах, на форумах. И если вы программируете для windows script host, не могли этого не заметить. Поэтому информация о том, что какая-то книжка по этому вопросу все-таки есть, название и автор - полезная информация, без нее вы можете долго и безуспешно искать хоть что-нибудь. А книжка будет полезной, т.к. если у вас возник тот вопрос, который вы задали, наверняка возникнут еще и другие, ответ на которые будет найти гораздо труднее, чем ответ на вопрос, касающейся программирования для браузера. А книжки (если знать какие) могут здорово помочь.

Deff 09.03.2013 00:09

kosmonavtom,
javascript - это язык браузера, он не взаимодействует с операционкой
То что Вы привели
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 Script http://ru.wikipedia.org/wiki/Windows_Script_Host
Это два разных языка, связаны ток словом скрипт, некая связка есть в ИЕ, но мало Вам годиться,
Ищите на форумах, к примеру ru-board или http://www.script-coding.com/index.html

dmitriymar 09.03.2013 00:48

Цитата:

Сообщение от Deff
javascript - это язык браузера, он не взаимодействует с операционкой

да щаз
http://msdn.microsoft.com/ru-ru/libr.../br211385.aspx
Цитата:

Сообщение от Deff
некая связка есть в ИЕ

сто лет как не только

cyber 09.03.2013 02:16

Цитата:

Сообщение от dmitriymar

ну нельзя же просто взять js файл и выполнить на винде (как vb), там через приложение.
на сколько я понял фишка в этих либах
<link href="//Microsoft.WinJS.1.0/css/ui-light.css" rel="stylesheet" /> 
    <script src="//Microsoft.WinJS.1.0/js/base.js"></script>
    <script src="//Microsoft.WinJS.1.0/js/ui.js"></script>

kosmonavtom 09.03.2013 08:48

дорогой "Профессор" cyber, повторяю еще раз: "запускаю файл вида *.js на любом компьютере с Windows XP и с Windows 7 и он спокойно работает", т.к. есть встроенный интерпретатор этого языка, а свой совет я Вам уже дал - отправляйте мне еще МИНУСОВ... т.к. зачем Вам все это знать и общаться, и заниматься js если можно к книжкам отправить собеседника, а потом время тратить на проставление минусов!

Дорогой "кандидат" rgl, задумайтесь над тем, что люди приходят на форум со своим вопросом не потому, что ничего не читали, а потому, что надеются на общение и на понимание проблем и их совместное решение. Это равно как учитель на каждом уроке давал бы конспект из книжки делать вместо объяснения материала. Зачем такой учитель? - уж лучше бы вообще урока не давал. А Ваше предложение по поводу запуска не работает у меня.

dmitriymar 09.03.2013 11:58

Цитата:

Сообщение от cyber
ну нельзя же просто взять js файл и выполнить на винде (как vb), там через приложение.
на сколько я понял фишка в этих либах
<link href="//Microsoft.WinJS.1.0/css/ui-light.css" rel="stylesheet" />
<script src="//Microsoft.WinJS.1.0/js/base.js"></script>
<script src="//Microsoft.WinJS.1.0/js/ui.js"></script>


Цитата:

Сообщение от cyber
js файл и выполнить на винде (как vb), там через приложение.

а расширение у них какое?:)

cyber 09.03.2013 15:28

dmitriymar, ну так они выполняются не напрямую (как тот же батник ).

Deff 09.03.2013 15:37

Ну я лох в этом, вот dmitriymar, сейчас и изобразит нужный код пользователю, собственно если выпады об этом,
если не изобразит, он в нашей же стае, и трёп для оффтопика

Deff 09.03.2013 15:43

Цитата:

Сообщение от kosmonavtom
дорогой "Профессор" cyber, повторяю еще раз: "запускаю файл вида *.js на любом компьютере с Windows XP и с Windows 7 и он спокойно работает", т.к. есть встроенный интерпретатор этого языка, а свой совет я Вам уже дал - отправляйте мне еще МИНУСОВ... т.к. зачем Вам все это знать и общаться, и заниматься js если можно к книжкам отправить собеседника, а потом время тратить на проставление минусов!

Я работаю с js для собстственного ресурса, и за задачи тут берусь лишь интересные мне и возможно используемые в дальнейшем, Вы оказываете безвозмезно незнакомым помощь связанную с напрягом изучения приложений, не нужных в данное время, - Вам лично ?
Проще стрелять сигарету в среде курильщиков, нежели у некурящих,
И проще найти ответ в Вашем тематическом ресурсе!

cyber 09.03.2013 16:13

http://ru.wikipedia.org/wiki/Windows_Script_Host , ТС накуренный и перепутал JScript && JavaScript.
Цитата:

предназначенный для запуска сценариев на скриптовых языках JScript и VBScript,
Цитата:

JScript is the Microsoft implementation of the ECMA 262 language specification (ECMAScript Edition 3). With only a few minor exceptions (to maintain backwards compatibility), JScript is a full implementation of the ECMA standard. This overview is intended to help you get started with JScript.

dmitriymar 09.03.2013 16:27

Цитата:

Сообщение от Deff
Ну я лох в этом, вот dmitriymar, сейчас и изобразит нужный код пользователю, собственно если выпады об этом,
если не изобразит, он в нашей же стае, и трёп для оффтопика

Даун, ты хоть теоретически поумнеть можешь? хотябы в перспективе в ближ. лет 10?

cyber,
всё проще
http://kulibaba.net/programming/javascript/windows8

cyber 09.03.2013 16:37

dmitriymar, это я знаю, но Тс говорил по Xp и 7, http://habrahabr.ru/company/microsoft/blog/170615/ .
Deff, Тс первым начал борзеть (как в школе, "он первый начал" :)).

Deff 09.03.2013 16:41

Цитата:

Сообщение от cyber
Тс первым начал борзеть (как в школе, "он первый начал"

Ок, но раздражает гуглопоисковые высказывания в процессе, Ассов по гуглу

cyber 09.03.2013 16:43

Deff, тут да, лично я за офицальные подтверждения, либо ссылки на такие ресурсы как вики или хабр (там есть ссылка на источник).

dmitriymar 09.03.2013 16:43

Цитата:

Сообщение от Deff
dmitriymar, Высвое говно Выказывайте маме, а не тут на форуме, как до готового кода, так срылся, чо язык к ж прилип?

1 читать научись
2 за свои слова я отвечаю, за то как их слышат и интерпретируют -пусть отвечают те, кто слышит и интерпретируют как хотят, а не так сказано.
3 Почему я должен реализовывать твою придурь? ты это придумал а реальность вот, так что не перекручивай :
Цитата:

Сообщение от Deff
javascript - это язык браузера, он не взаимодействует с операционкой
да щаз
http://msdn.microsoft.com/ru-ru/libr.../br211385.aspx
Сообщение от Deff
некая связка есть в ИЕ
сто лет как не только
т.е ты хочешь сказать что твоё высказывание не бред?
после твоих попыток манилипулировать ситуацией -ты как минимум лгун-в принципе ты сам всё знаешь о себе
бред потому, что
Цитата:

Сообщение от dmitriymar
http://kulibaba.net/programming/javascript/windows8

-и этой новостью инет был пронизан.

гавно -как же тебе не нравятся когда тебе говорят правду -ты нихрена не знаешь и не будешь знать

адьёс мучача


Часовой пояс GMT +3, время: 08:35.