Skif_off
Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору За кодировки не скажу, ибо так не делаю: предпочитаю другие решения, которые не доставляют неудобств с кодировками, хотя и учитывают их. Цитата: Мне более удобно, когда сначала выделяется необходимые файлы и папки (из разных мест), а затем идет упаковка по списку. А так в скрипте надо постоянно нажимать отмену или ставить и убирать комментарий строки 35. | Мне показалось удобным повесить всё на одну кнопку, нет - так нет :) Тогда две кнопки: Код: TOTALCMD#BAR#DATA %COMMANDER_PATH%\Utils\new.js %WL "%T" "Files_list.lst" C:\Windows\System32\WScript.exe,3 Создание списка %COMMANDER_PATH%\Utils\ -1 | Код: TOTALCMD#BAR#DATA %COMMANDER_PATH%\Utils\new.js "%T" "Files_list.lst" C:\Windows\System32\WScript.exe,3 Упаковка по списку %COMMANDER_PATH%\Utils\ -1 | Количество параметров определяют поведение. Наверное, проще повесить на клавиатуру, а не держать две кнопки, типа Ctrl+Alt+Z - создание списка, Ctrl+Alt+A - упаковка. Хотя, возможно, у вас заведено отдельное меню для подобных задач. Скрипт: Код: // %WL "%T" "Files_list.lst" // "%T" "Files_list.lst" var shell = new ActiveXObject("WScript.shell"); var fso = new ActiveXObject("Scripting.FileSystemObject"); var FileList = ""; var AddToFileList = ""; var AddList = ""; var AddTo = ""; var AddList = ""; var oPattern; var UnSortFileList; var SortFileList; // исходя из количества параметров определяем поведение if (WScript.Arguments.length == 3) { // читаем файл-список FileList = fso.OpenTextFile(WScript.Arguments.Item(0), 1, false, -1); AddToFileList = FileList.ReadAll(); FileList.Close(); // убираем слэш в конце строк oPattern = new RegExp("\\\\$", "gm"); AddList = AddToFileList.replace(oPattern, ""); // если новый список существует, то дописываем в него, иначе - создаём новый if (fso.FileExists(WScript.Arguments.Item(1) + WScript.Arguments.Item(2))) { AddTo = fso.OpenTextFile(WScript.Arguments.Item(1) + WScript.Arguments.Item(2), 8, false, -1); AddTo.Write(AddList); AddTo.Close(); } else { AddTo = fso.OpenTextFile(WScript.Arguments.Item(1) + WScript.Arguments.Item(2), 2, true, -1); AddTo.Write(AddList); AddTo.Close(); } } // если только два параметра, то пакуем else if (WScript.Arguments.length == 2) { // проверяем существование архива if (fso.FileExists(WScript.Arguments.Item(0) + "_backup.rar")) { // сообщаем, если существует shell.Popup("Файл _backup.rar уже существует!", 0, "Бэкап по списку", 48); } else { // если архива нет, то читаем новый список FileList = fso.OpenTextFile(WScript.Arguments.Item(0) + WScript.Arguments.Item(1), 1, false, -1); UnSortFileList = FileList.ReadAll(); FileList.Close(); // режем в массив UnSortFileList = UnSortFileList.split("\r\n"); // сортируем SortFileList = UnSortFileList.sort(); // оставляем уникальные SortFileList = unique(SortFileList); // массив в строку SortFileList = SortFileList.join("\r\n"); // убираем пустую строку в начале (хз, откуда она берётся, не пойму :) ) oPattern = new RegExp("^\\r\\n"); SortFileList = SortFileList.replace(oPattern, ""); // пишем новый список FileList = fso.OpenTextFile(WScript.Arguments.Item(0) + WScript.Arguments.Item(1), 2, true, -1); FileList.Write(SortFileList + "\r\n"); FileList.Close(); // запускаем упаковку // открывается окно консоли, но свёрнутым в панель задач shell.Run("\"%COMMANDER_PATH%\\Utils\\Rar.exe\" a -r -ep1 \"" + WScript.Arguments.Item(0) + "_backup.rar\" " + "@\"" + WScript.Arguments.Item(0) + WScript.Arguments.Item(1) + "\"", 2, true); // окно консоли скрыто, вообще никакой индикации - не очень хорошо //shell.Run("\"%COMMANDER_PATH%\\Utils\\Rar.exe\" a -r -ep1 \"" + WScript.Arguments.Item(0) + "_backup.rar\" " + "@\"" + WScript.Arguments.Item(0) + WScript.Arguments.Item(1) + "\"", 0, true); // открывается окно консоли (как обычное окно - активно) //shell.Run("\"%COMMANDER_PATH%\\Utils\\Rar.exe\" a -r -ep1 \"" + WScript.Arguments.Item(0) + "_backup.rar\" " + "@\"" + WScript.Arguments.Item(0) + WScript.Arguments.Item(1) + "\"", 1, true); // с использованием AskParam (не забыть исправить путь на свой!): вариант с запросом имени архива //shell.Run("\"%COMMANDER_PATH%\\Utils\\AskParam.exe\" /w /c\"Бэкап по списку\" /t\"_backup\" /p\"Имя файла:\" \"%ComSpec%\" \"%COMMANDER_PATH%\\Utils\\Rar.exe\" a -r -ep1 \"" + WScript.Arguments.Item(0) + "_backup.rar\" " + "@\"" + WScript.Arguments.Item(0) + WScript.Arguments.Item(1) + "\"", 1, true); // удаляем список fso.DeleteFile(WScript.Arguments.Item(0) + WScript.Arguments.Item(1), 1); shell.Popup("Создание резервной копии завершено.", 0, "Бэкап по списку", 64); } } else { shell.Popup("Неверное количество параметров!", 0, "Бэкап по списку", 48); } function unique(input) { var o = {}; var l = input.length; var r = []; var i; for(i = 0; i < l; i += 1) { o[input[i]] = input[i]; } for(i in o) { r.push(o[i]); } return r; } |
| Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 16:55 20-02-2015 | Исправлено: Skif_off, 16:57 20-02-2015 |
|