rgl, внутри скрипта это нужно, чтобы пользователь щелкнул на единственный файл, а не запускал лишние консоли и прочее. И я думаю он не будет большее количество раз выполняться ведь именно для этого там и стоит if ...
|
kosmonavtom, а почему и именно скриптовый язык, почему бы не воспользоваться тем же C# он не на много сложнее, проблема в размере файла?
|
kosmonavtom,
Смотрите мое поправленное предыдущее сообщение cyber, этот язык уже есть, есть всегда и у всех (под Windows, разумеется) а всякие там C#, перлы и питоны нужно устанавливать, что не всегда хочется, и не всегда возможно. |
Цитата:
|
rgl, спасибо за новое условие :) - не знал раньше о таких вещах. А вот код в итоге работает еще и без моего условия и без повторного перезапуска, а просто с двумя строками вначале следующего вида:
var wsh = new ActiveXObject("WScript.Shell"); var cmd = wsh.Exec("cmd /c cscript //H:cscript"); // Перенастройка системы на консольный режим работы и это я так понимаю самое простое решение для моей рекурсии. Но твое условие я все же думаю оставить в коде т.к. мало ли будут пользователи у которых не успеет консольный режим включиться. Конечный вариант пока посмотрю на всех машинах, а потом выложу в тему. |
Цитата:
Цитата:
Да, и в моем варианте лучше чуть-чуть подправить: if( ! /cscript\.exe$/i.test( WScript.FullName ) ) { // проверить что запущено в консольном режиме (Добавить буковку i, чтобы было нечувствительно к регистру) |
rgl,
Цитата:
|
В процессе эксплуатации возникла новая фишка. Теперь оказалось, что если рекурсия натыкается на папку к которой у пользователя нет доступа, то он вылетает. Для исправления ситуации и продолжения работы скрипта, не глядя на эту папку, я решил добавить условие вида: if (path.StdErr == 0) - оно там есть в скрипте ниже. Но после этого скрипт виснет и жрет 50% ЦП!!! Я что, не правильно записал проверку ошибок?
//var wsh = new ActiveXObject("WScript.Shell"); //if( ! /cscript\.exe$/.test( WScript.FullName ) ) { // проверить что запущено в консольном режиме // wsh.Run("cmd /c cscript " + WScript.ScriptName ); // если нет, перезапустить в консоли // WScript.Quit(0); // и завершить текущую инкарнацию (пусть работает перезапущенный в консоли) //} // 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; // Количество записей в массиве адресов } if (path.StdErr == 0) // КАК проверить будет ли ошибка у этой папки???? { nomerProverki=nomerProverki+1; WScript.Echo("Номер проверки = " + nomerProverki + " Номер записи = " + [nomerZapisi-1]); if (nomerProverki>=nomerZapisi) { sfCount = 0; } else { WScript.Echo("ПАПКА НА ПРОВЕРКУ = " + vsePapki[nomerProverki]); sfCount = sfCount - 1; sFolders(vsePapki[nomerProverki]); } } } } WScript.Sleep(99000); |
Цитата:
|
rgl, спасибо. Значит я так понял что мне нужно:
1) Поставить строку проверки читабельности папки между 37 и 38 т.к. например системную папку лучше и не записывать в массив записанных адресов тогда вообще. 2) Проверять seq.item().path - но не получается, может не правильно указываю свойства?! Ввести вместо vsePapki[nomerZapisi] еще одну переменную и у нее свойства проверить?! - выберу когда свойства папок найду. 3) И проверить системная ли эта папка? или же есть ли у пользователя к ней доступ? - что-то вроде этого. Только как? Ладно будем искать... но пока погуглю свойства папки наверно. |
Часовой пояс GMT +3, время: 06:34. |