Показать сообщение отдельно
  #61 (permalink)  
Старый 19.03.2013, 15:10
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Вместо того, чтобы пытаться с помощью форума исправить найденный непонятногде говнокод, лучше было бы это время и усилия потратить на то, чтобы разобраться в теме и написать нормально самому.
Мои замечания к приведенному коду:
1. Непонятно зачем тут вложенные циклы, снаружи while а внутри for. Достаточно одного.
2. Непонятно зачем многократно преобразовывать текстовую строку в объект типа фолдер и обратно. Лучше рекурсивной функции передавать сам объект а не строку, а преобразовывать в строку только для сообщения на консоль.
3. Чтобы найти текущую дирректорию (начальную) не нужны манипуляции с полным именем скрипта, для этого есть специальное свойство.
4. Хотя этот кусок и закомментарен сейчас, к регулярному выражению лучше добавить буковку i, я уже писал об этом.
5. Не надо использовать имя переменной root для обозначения каждой дирректории, сколь угодно глубоко вложенной. Затрудняет чтение (и понимание) кода.
6. Также затрудняет чтение и вносит путаницу имя переменной path, когда есть и используется одноименное свойство
С учетом всего этого получается:
var wsh = WScript.CreateObject("WScript.Shell");
//if( ! /cscript\.exe$/i.test( WScript.FullName ) ) {  // проверить что запущено в консольном режиме
//  wsh.Run("cmd /c cscript " + WScript.ScriptName ); // если нет, перезапустить в консоли
//  WScript.Quit(0); // и завершить текущую инкарнацию (пусть работает перезапущенный в консоли)
//}
var fso = WScript.CreateObject("Scripting.FileSystemObject"); 

//var curdir = wsh.CurrentDirectory; // получаем текущую дирректорию (строку)
//var root = fso.GetFolder(curdir); // текущая дирректория (объект типа фолдер)
//sFolders(root); // вызываем рекурсивную функцию первый раз
sFolders(fso.GetFolder(wsh.CurrentDirectory));

function sFolders(dir) {
	for( var seq = new Enumerator(dir.SubFolders); !seq.atEnd(); seq.moveNext()) {
		WScript.Echo( "ПАПКА НА ПРОВЕРКУ = " + seq.item().path );
		sFolders( seq.item() )
	}
}

Последний раз редактировалось rgl, 19.03.2013 в 15:12.
Ответить с цитированием