VSHY
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: // em_configChangeIniFiles.js // Открытие файлов настройки Total Commander в указанном в параметрах запуска скрипта редакторе либо заданным в диалоге ТС "Настройка: Правка по F4" // // Модификация скрипта: // Version: 2.0 (2014.11.17) // Автор: VladSh <vladsh на fromru тчк com> // http://forum.ru-board.com/topic.cgi?forum=5&topic=45288&start=3680#17 // // Оригинальный скрипт: // Version: 1.1 // Автор: mozers™ <mozers@mail.ru> // http://forum.wincmd.ru/viewpost.php?p=61155&sid=d8cd4c2148e75a549bd0b776d864758a // ============================================================ // // Параметры запуска задаются в usercmd.ini в секции с именем настроящего скрипта: // • editors - возможные пути к файлам текстовых редакторов через ; или , // • files - перечень открываемых файлов, указанных через ; или , // Поддерживаемый в настоящее время перечень см. в значениях констант ниже. // Константы для определения путей и открытия файлов var file_wincmd_ini = 'wincmd.ini'; var file_usercmd_ini = 'usercmd.ini'; var file_wcx_ftp_ini = 'wcx_ftp.ini'; var file_ftp_ini = 'ftp.ini'; var file_wincmd_mnu = 'wincmd.mnu'; // Инициализируем нужные нам ActiveX объекты try { var WshShell = new ActiveXObject('WScript.Shell'); var fso = new ActiveXObject('Scripting.FileSystemObject'); } catch(e) { WScript.Echo('Для работы скрипта необходима установка Windows Script Host (WSH)!'); WScript.Quit(); } try { var TCS = new ActiveXObject('TCScript.Helper'); } catch(e) {} // Определение путей к конфигурационным файлам var ConfigManager = { lstConfigs: {}, profileDir: '', // местоположение файлов настройки initialize: function() { // wincmd.ini + определение пути к профилю this.lstConfigs[file_wincmd_ini] = { path: '', getPath: function() { if (!this.path) { var envvar_commander_ini = '%COMMANDER_INI%'; this.path = WshShell.ExpandEnvironmentStrings(envvar_commander_ini); if (this.path == envvar_commander_ini) { WScript.Echo('Скрипт расчитан на работу с Total Commander верcии 6.55 или выше!'); WScript.Quit(); } ConfigManager.profileDir = this.path.replace(/[^\\]*$/, ''); } return this.path; } }; // usercmd.ini this.lstConfigs[file_usercmd_ini] = { path: '', getPath: function() { if (!this.path) { this.path = ConfigManager.profileDir + file_usercmd_ini; } return this.path; } }; // wcx_ftp.ini this.lstConfigs[file_wcx_ftp_ini] = { path: '', getPath: function() { if (!this.path) { this.path = ConfigManager.profileDir + file_wcx_ftp_ini; } return this.path; } }; // Имя пользовательского файла FTP настроек ftp.ini this.lstConfigs[file_ftp_ini] = { path: '', getPath: function() { if (!this.path) { this.path = ConfigManager.profileDir + file_ftp_ini; // если не будет найден, то откроется wcx_ftp.ini if (!fso.FileExists(this.path)) this.path = ConfigManager.getPath(file_wcx_ftp_ini); } return this.path; } }; // Файл меню this.lstConfigs[file_wincmd_mnu] = { path: '', getPath: function() { if (!this.path) { this.path = readINI(ConfigManager.getPath(file_wincmd_ini), 'MainMenu', ''); if (!/\\/.test(this.path)) { this.path = WshShell.ExpandEnvironmentStrings('%COMMANDER_PATH%\\LANGUAGE\\' + this.path); } } return this.path; } }; /* > Алгоритмы поиска каких-либо других файлов дописываем сюда < */ // Обязательное получение файлов, т.к. из них будут браться настройки this.getPath(file_wincmd_ini); }, getPath: function(filename) { return this.lstConfigs[filename].getPath(); } }; ConfigManager.initialize(); var usercmd_ini = ConfigManager.getPath(file_usercmd_ini); // Поиск редактора, заданного в параметрах запуска скрипта var editorPath; var arrEditor = readIniEx(usercmd_ini, WScript.ScriptName, 'editors', '').split(/;|,/); if (arrEditor[0]) { var p = 0; do { editorPath = WshShell.ExpandEnvironmentStrings(arrEditor[p]); if (fso.FileExists(editorPath)) break; else editorPath = ''; p += 1; } while (p < arrEditor.length) } // Если заданный вручную редактор отсутствует, то берем редактор, заданный в диалоге ТС "Настройка: Правка по F4" if (!editorPath) { editorPath = readINI(ConfigManager.getPath(file_wincmd_ini), 'Editor', '').replace('none', ''); if (editorPath) { if (/%1/.test(editorPath)) { // это - для тех, кто после пути к редактору дописал %1 editorPath = editorPath.replace(/"*([^"]*)"*.*/, '$1'); } } // Если и в настройках TC редактор не найден, пробуем взять по пути редактора Windows if (!editorPath || !fso.FileExists(editorPath)) { var editorDefault = 'notepad.exe'; editorPath = WshShell.ExpandEnvironmentStrings('%WINDIR%\\' + editorDefault); if (!fso.FileExists(editorPath)) { WScript.Echo('Заданный редактор и ' + editorDefault + ' не найдены!'); WScript.Quit(); } } } // Обрамляем полный путь к редактору кавычками if (!/^\"/.test(editorPath)) editorPath = '"' + editorPath + '"'; // Определяем перечень файлов, которые нам нужно открывать var arrFiles = readIniEx(usercmd_ini, WScript.ScriptName, 'files', file_wincmd_ini).split(/;|,/); // Открываем файлы в порядке, указанном в параметрах запуска for (var i = 0; i < arrFiles.length; i++) { editFile(arrFiles[i]); } // = = = = = = = = Ф У Н К Ц И И = = = = = = = = // Открытие файла в редакторе function editFile(filename) { var filepath = ConfigManager.getPath(filename); if (filepath) { if (fso.FileExists(filepath)) { WshShell.Run(editorPath + ' "' + filepath + '"', 1, false); } } } // Чтение заданного ключа из секции "Configuration" function readINI(filepath, key, default_value) { return readIniEx(filepath, 'Configuration', key, default_value); } // Чтение заданного ключа из указанной секции function readIniEx(filepath, section, key, default_value) { var value; // Если имеется установленный WSH Helper ActiveX for Total Commander (c)Volniy, то будем использовать его. if (TCS) { value = TCS.INIRead(filepath, section, key, default_value); value = WshShell.ExpandEnvironmentStrings(value); } else { // Если нет, то обходимся встроенными средствами value = default_value; if (fso.FileExists(filepath)) { if (fso.GetFile(filepath).Size > 0) { var file = fso.OpenTextFile(filepath, 1, false); var re = new RegExp('^' + key + '\s*=','i'); while (!file.AtEndOfStream){ var text = file.ReadLine(); if (re.test(text)){ value = WshShell.ExpandEnvironmentStrings(text.replace(/^.*=/,'')); break; } } file.Close(); } } } return value; } |
| Всего записей: 1092 | Зарегистр. 19-05-2008 | Отправлено: 14:00 17-11-2014 | Исправлено: VSHY, 04:28 18-11-2014 |
|