Скрипты - уникальный инструмент для достижения различных целей в работе с файлами и не только, особенно в файловом менеджере, даже если вы ничего раньше об этом ничего не слышали и не знали, то путём простых движений вы можете оптимизировать свои действия Тема тестирования скриптов создана для увеличения функциональности Total Commander Каждый может выложить свой скрипт написанный на любом языке: vbs, js, hta, au3,ahk, bat,cmd... главное, чтобы он относился как-то к Total Commander, можно было им воспользоваться и к нему было должное описание к применению. Каждый может протестировать, дать свой комментарий и ...[move]если есть интересная идея, вы можете поделиться ей и заказать скрипт, а вдруг она покажется интересной для авторов...[/move] Всё это делается для тех, кто хочет экономить время и автоматизировать работу Огромное спасибо участникам, авторам и всем повлиявшим на тему
Перед использованием скриптов, проэкспериментируйте сначала на "ненужных" файлах (у меня на разных дисках есть несколько папок с разными файлами для экспериментов) Как только вы убедитесь, что скрипт работает как надо, пользуйтесь на реальных файлах
- ряд скриптов могут не сработать: 1. Из-за раскладки клавиатуры (переключите раскладку, повторите заново) 2. Из-за неправильно указанных параметров (внимательно читайте комментарии внутри скриптов) 3. Из-за параметров %p и %P в командной строке и тому подобных (на практике иногда надо их брать кавычки "%P") 4. Из-за 2-х запущенных копий Total Commander (редко, но бывает) 5. Из-за неверно указанных путей использованных файлов (внимательно проверьте пути) 6. Из-за недостающих дополнительных утилит, использующих скриптом (проверьте есть ли они у вас) 7. Из-за очень большого количества файлов, посланных для обработки скрипту [indent][indent]- Может показаться, что скрипт не сработал, возможно он ещё работает. Чтобы в этом убедится откройте Диспетчер задач и посмотрите процесс - Скрипты, связанные с посланием команд Total Commander'y при очень большом количестве файлов работают неадекватно. (попробуйте в Тотале просто выделить 100.000 файлов - это займёт несколько секунд, сколько точно, никто сказать не может - это зависит от многих факторов. Так же и скрипты, связанные с фильтрацией, выделением... может показаться, что глючат - на самом деле сам Тотал не справляется с посланной ему командой, если речь идёт об обработке большого количества файлов)[/indent][/indent] --------------------------------------------------------------------------------------------------------------------------------- 8. Из-за ошибки автора - Сообщайте об ошибках
Для вызова скриптов в пользовательских командах или кнопках используются параметры:
? - В качестве первого параметра вызывает перед стартом программы диалоговое окно, содержащее указанные далее параметры. Вы можете изменить их перед стартом программы и даже отменить запуск
%P - Вставляет в командную строку исходный путь, включая обратную косую черту (\) в конце %N - Помещает в командную строку имя файла с расширением под курсором %O - Помещает в командную строку текущее имя файла без расширения %E - Помещает в командную строку текущее расширение (без предшествующей точки).
%T - Вставляет текущий каталог назначения %M - Помещает в командную строку текущее имя с расширением файла в каталоге назначения
%S - Помещает в командную строку имена всех выделенных файлов. Имена, содержащие пробелы, будут взяты в кавычки. Имейте в виду, что длина командной строки не может превышать 32767 символов %S10 - Помещает в командную строку имена не более чем 10 первых выделенных файлов. Вы можете использовать любое другое число для ограничения количества файлов, передаваемых в программу
%R - Работает аналогично %S, но для выделенных файлов в целевой панели
Замечания:
• %N и %M вставляют длинное имя, в то время как %n и %m вставляют имя DOS (8.3) %P и %T вставляют пути с длинными именами каталогов, а %p и %t — с короткими То же самое для %o, %e и %s и %r
• Если приписать %P, %p, %T или %t непосредственно перед %S или %s (без пробела между ними!), то к имени каждого файла из списка будет добавлен путь. При наличии пробелов полный путь автоматически заключается в кавычки. Пример: %P%S помещает в командную строку список всех выделенных файлов с полными путями
%L, %l, %F, %f, %D, %d, %WL, %WF, %UL, %UF - Создаётфайл списка в каталоге, заданном переменной TEMP, с именами выделенных файлов и каталогов и добавляет имя этого файла списка в командную строку. Список удаляется автоматически, когда запущенная программа завершается. Можно создать файл списка в одном из 10-ти форматов:
%L - Длинные имена файлов, включая полный путь, например, c:\Program Files\Long name.exe %l - (L в нижнем регистре) Короткие имена файлов, включая полный путь, например, C:\PROGRA~1\LONGNA~1.EXE.
%F - Длинные имена файлов без пути, например, Long name.exe. %f - Короткие имена файлов без пути, например, LONGNA~1.EXE.
%D - Короткие имена файлов, включая полный путь, но с использованием набора символов DOS для диакритических знаков. %d - Короткие имена файлов без пути, но с использованием набора символов DOS для диакритических знаков.
%UL, %UF - Аналогично %L и %F, но файлы списка создаются в Unicode-формате UTF-8 (с сигнатурой). %WL, %WF - Аналогично %L и %F, но файлы списка создаются в Unicode-формате UTF-16 (с сигнатурой).
%v - Помещает в командную строку имя виртуального файла при работе с FS-плагинами виртуальных панелей, для которых %N вставляет имя реального файла (в файловой системе), на который указывает выбранный элемент. %V - То же, что и %v, но с полным путём (включая имя плагина).
%X - Трактует последующие параметры как относящиеся к левой/правой панелям вместо исходной/целевой: %P, %p (путь слева), %T, %t (путь справа), %N, %n (имя слева), %M, %m (имя справа), %S, %s (выделенные слева), %R, %r (выделенные справа). Пример:%X%P %T - передаёт текущий путь слева и справа, например, для внешнего инструмента синхронизации.
%x - Трактует последующие параметры снова как относящиеся к исходной/целевой панелям. Пример:%X%P %x%P - передаёт текущий путь в левой панели и в исходной.
%Z - Будучи указан в любом месте в списке параметров, разрешает передавать архивы в качестве части пути во внешние программы для %P и %T, когда в панели открыто содержимое архива. Пример:%Z%P - передаёт имя открытого в панели архива во внешнюю программу.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %% - Вставляет одиночный знак процента, важно для переменных окружения, которые прописываются в параметрах Пример: %%COMMANDER_PATH%%\
1. Указанный в секциях "код" текст необходимо сохранить в виде текстового файла с именем и расширением, указанным в начале кода. 2. Затем нужно перетащить этот файл на панель инструментов Total Commander - создастся кнопка. 3. Созданную кнопку необходимо подредактировать - нажать правой кнопкой мыши на созданной кнопке - выбрать "Изменить". 4. Изменение полей [indent][indent] а)Команда: путь\к\скрипту (обычно он уже есть) для скриптов au3, ahk перед скриптом необходимо поставить путь запускаемого преложения пример: %COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3.exe "%COMMANDER_PATH%\Scripts\TextWork\InsertText.au3" б)Параметры: строку нужно заполнить согласно описанию в шапке скрипта. пример: %L в)Путь запуска: лучше это поле очищать (для bat, cmd и некоторых скриптов он необходим) г)Файл значка: редактируются "по вкусу" д)Подсказка: берётся из описания к скрипту, с учётом тех или иных параметров[/indent][/indent]
1. В связи с тем, что функции во многих скриптах повторяются, ряд из них вынесены в отдельные файлы Рекомендую создать папку Include скачайте и положите туда эти файлы:
Скачать:TCMCWindow (Версия 1.3 от 31.01.2012) Скачать:TCMCWindow (Версия 1.5. от 22.03.2012)
Что может утилита совместно с TCMC - посылать команды Total Commander - посылать клавиатурные нажатия окнам - вводить строки в окна - посылать текст в буфер обмена - возвращать текст из буфера обмена - устанавливать необходимую паузу между любыми действиями
Описание прилагается в архиве с программой Так же в архиве лежит утилита TCMC
Дата: Воскресенье, 06.11.2011, 23:09 | Сообщение # 81
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Подсчёт к-ва раз встречающейся фразы в файле и вывод отчёта
Code
' CountPhraseInText.vbs '======================== Описание ===================================== ' Подсчёт количества раз встречающейся фразы в файле и вывод отчёта '======================= Параметры ===================================== ' 1-й параметр: Файл, в котором небходимо подсчитать фразу ' 2-й параметр: Фраза (если параметр отсутствует, она вводится в диалоге) '======================== Примеры ===================================== ' %P%N - подсчёт фразы в файле под курсором, фраза вводится в диалоге ' %P%N "привет" - подсчёт фразы "привет" в файле под курсором ' "%%COMMANDER_PATH%%\Language\Wcmd_Rus.mnu" " em_"
' Автор: Аверин Андрей ' Версия: 1.2 (2010 - 06.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '===================================================================== With WScript Cnt = .Arguments.Count If Cnt = 0 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Нужен минимум один параметр %P%N",_ vbOKOnly & vbInformation, "Подсчёт фраз в тексте" : .Quit End If InFile = CreateObject("WScript.Shell").ExpandEnvironmentStrings(.Arguments(0)) If Cnt > 1 Then fStr = .Arguments(1) Else Clip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") fStr = InputBox("Введите тест для поиска", "Подсчёт к-ва текста", Clip) End If End With
With CreateObject("Scripting.FileSystemObject") If Not .FileExists(InFile) Then WScript.Quit On Error Resume Next Set ts = .OpenTextFile(InFile, 1) End With
Do Until ts.AtEndOfStream Stroka = ts.ReadLine For i = 1 To (Len(Stroka) - Len(fStr)+1) If Mid(Stroka, i, Len(fStr)) = fStr Then s = s + 1 Next Loop MsgBox "Фраза" & Chr (34) & fStr & Chr (34) & vbNewLine &_ "повторяется в тексте " & Cstr(s) & " раз(а)",, "Результат:" ts.Close : Set ts = Nothing : WScript.Quit
' Автор: SkOle & Аверин Андрей ' Версия: 1.1 (08.11.2011) ' Site: http://tc-image.3dn.ru '==================== Изменяемые пути ================================== Exe = "%COMMANDER_PATH%\Utilities\USB\deveject\deveject.exe" '======================================================================== With CreateObject("WScript.Shell") Exe = .ExpandEnvironmentStrings(Exe) If Not CreateObject("Scripting.FileSystemObject").FileExists(Exe) Then MsgBox "Не правильно указан путь до deveject.exe" & vbNewLine &_ "Дом.страница http://www.withopf.com/tools/deveject/", vbOKOnly & vbInformation,_ "Безопасное отключение USB-дисков" WScript.Quit End If For Each objDisk In GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2").ExecQuery("SELECT * FROM Win32_DiskDrive") If objDisk.InterfaceType = "USB" Then If MsgBox("Отключить " & objDisk.Caption & " ?", vbYesNo + vbQuestion, "Безопасное извлечение устройств") = vbYes Then .Run Chr(34) & Exe & Chr(34) & " -EjectId:" & objDisk.PNPDeviceID End If Next End With WScript.Quit
Копирует и устанавливает выделенные шрифты в системную папку Font
Code
' InstallFont.vbs '======================== Описание ==================================== ' Копирует и устанавливает выделенные шрифты в системную папку Font ' Установка шрифта вызовом API и регистрация шрифта в реестре '======================== Параметры ==================================== ' {файл список} ' %L ' ' Автор: Аверин Андрей ' Версия: 1.2 (09.10.2010 - 28.12.2010) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================================= Option Explicit Dim FSO, WSH, ListFile, Path, Ext, i, TName, TPath Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("WScript.Shell") Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1) i = 0
Do While Not ListFile.AtEndOfStream Path = ListFile.ReadLine Ext = FSO.GetExtensionName(Path) TName = FSO.GetBaseName(Path) & "." & Ext TPath = WSH.SpecialFolders("Fonts") & "\" & TName If (FSO.FileExists(Path)) And (FSO.FileExists(TPath) = False) Then if UCase(Ext) = "TTF" Or UCase(Ext) = "OTF" Or UCase(Ext) = "TTC" Or UCase(Ext) = "FON" Then FSO.CopyFile Path, TPath WSH.Run "RunDll32.exe gdi32.dll,AddFontResourceA " & TName WSH.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts\" &_ FSO.GetBaseName(Path) & " (TrueType)" ,TName,"REG_SZ" i = i +1 End if End If Loop
MsgBox "Скопировано и зарегистрировано в систему " &_ i & " шрифта(ов)", vbInformation ,"Установка шрифтов"
ListFile.Close : Set ListFile = Nothing : Set FSO = Nothing : Set WSH = Nothing : WScript.Quit
satuk Да, не хватает DevEject.exe, Как-то не заметил и не внёс это в комментарий, Немного подправил скрипт - вынес путь, чтобы удобнее было вставить свой путь до утилиты, и внёс адрес дом сайта утилиты Спасибо за внимательность Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Упаковать выделенные файлы и папки в ISO-образ (требуется mkisofs.exe) Скачать mkisofs.exe
Code
' Mkisofs.vbs '======================== Описание ===================================== ' Упаковать выделенные файлы и папки в ISO-образ (требуется mkisofs.exe) '======================= Параметры ===================================== ' 1-й параметр: Список папок\файлов ' 2-й параметр: Куда\упаковывать\ ' 3-й параметр: Имя ISO-файла ' (если 3-го параметра нет, то имя вводится в диалоге) '======================== Примеры ===================================== ' %L %t ' %L "d:\Образы\" ' %L %t "%N" ' %L "d:\Образы\" "Имя_Образа"
' Автор: Flasher & Аверин Андрей ' Версия: 1.3 (22.06.2011 - 08.11.2011) ' Site: http://tc-image.3dn.ru '==================== Изменяемые пути ================================== Util = "%COMMANDER_PATH%\Utilities\CD\Mkisofs\Mkisofs.exe" '======================================================================== Titles = "Создание образа ISO из выделенного списка" With CreateObject("WScript.Shell") Util = .ExpandEnvironmentStrings(Util) If Not CreateObject("Scripting.FileSystemObject").FileExists(Util) Then MsgBox "Не правильно указан путь до Mkisofs.exe" & vbNewLine &_ "http://fy.chalmers.se/~appro/linux/DVD+RW/tools/win32/mkisofs.exe", vbOKOnly & vbInformation, Titles WScript.Quit End If End With
With WScript Cnt = .Arguments.Count If Cnt > 1 Then List = .Arguments(0) : tPath = .Arguments(1) If Cnt > 2 Then Name = .Arguments(2) Else Clip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") Name = InputBox("Введите имя ISO-файла:", Titles, Clip) End If Else MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть минимум ДВА параметра %L %t", vbOKOnly & vbInformation, Titles .Quit End If If Len(Name) = 0 Then .Quit End With
On Error Resume Next With CreateObject("Scripting.FileSystemObject") For Each F In Split(.OpenTextFile(List, 1).ReadAll, vbNewLine) If .FolderExists(F) Then Str = Str & Chr(32) & Chr(34) & .GetFolder(F).Name & Chr(34) & "="& Chr(34) & F & Chr(34) If .FileExists(F) Then If Len(.GetFileName(F))<=103 Then Str = Str & Chr(32) & Chr(34) & F & Chr(34) Else Str = Str & Chr(32) & Chr(34) & Left(.GetBaseName(F), Len(.GetBaseName(F))+103-Len(.GetFileName(F))) & "." & .GetExtensionName(F) & Chr(34) & "="& Chr(34) & F & Chr(34) End If End If Next End With Str = Replace(Chr(34) & tPath & Name & ".iso" & Chr(32) & Chr(34) & Str, "\", "/") With CreateObject("WScript.Shell") .Run Chr(34) & Util & Chr(34) & " -quiet -r -f -joliet-long -nobak -graft-points -o " & Str, 0, True .Popup "Образ создан!", 1, "Результат", 64 End With
' WacTimeWinamp.vbs '======================== Описание ========================== ' Играть\Остановить Winamp через N минут (используется Wac.exe) '======================= Параметры =========================== ' 1-й параметр: Команда посылаемая Winamp ' - play - воспроизведение ' - pause - пауза ' 2-й параметр: Минуты (если нет параметра, минуты можно ввести в диалоге) '======================== Примеры =========================== ' play 5 - Играть через 5 минут ' pause 5 - Поставить на паузу через 5 минут
' Автор: Аверин Андрей ' Версия: 1.0 (08.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================== Изменяемые пути ====================== Wac = "%COMMANDER_PATH%\Utilities\MultiMedia\Twinamp\Wac.exe" '=============================================================== Wac = CreateObject("WScript.Shell").ExpandEnvironmentStrings(Wac) If Not CreateObject("Scripting.FileSystemObject").FileExists(Wac) Then MsgBox "Не правильно указан путь до Wac.exe" & vbNewLine &_ "скачать Wac http://wincmd.ru/plugring/TWinAmp2.html",_ vbOKOnly & vbInformation, "Управление Winamp " WScript.Quit End If
With WScript Cnt = .Arguments.Count If Cnt > 0 Then Comand = .Arguments(0) If Cnt > 1 Then TimeOut = .Arguments(1) Else TimeOut = InputBox("Введите через сколько минут послать команду Winamp",_ "Управление Winamp ", "5") End If Else MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть минимум ДВА параметра" & vbNewLine &_ "Пример: pause 5",vbOKOnly & vbInformation,_ "Управление Winamp " .Quit End If If Len(TimeOut) = 0 Then .Quit End With WScript.Sleep CInt(TimeOut) * 60 * 1000 ' Время задержки в миллисекундах
Option Explicit '==================== Изменяемые пути ================================== Program = "%COMMANDER_PATH%\Plugins\wfx\BadCopy\NSCopy\NSCopy.exe" '======================================================================== If WScript.Arguments.Count < 2 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть минимум ДВА параметра %L %t",_ vbOKOnly & vbInformation, "Копирование выделенных ''плохих'' файлов" WScript.Quit End If
Dim FSO, WSH, ListFile, Program, Param, TPath Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("WScript.Shell")
Program = GetPath(Program) If Not FSO.FileExists(Program) Then MsgBox "Не правильно указан путь до NSCopy.exe" & vbNewLine &_ "скачать http://dmitrys.nm.ru/programs/nscopy/", vbOKOnly & vbInformation,_ "Копирование выделенных ''плохих'' файлов" WsEnd End If
TPath = WScript.Arguments(1) Set ListFile = FSO.OpenTextFile(GetPath(WScript.Arguments(0)), 1)
Do While Not ListFile.AtEndOfStream Param = ListFile.ReadLine WSH.Run Chr(34) & Program & Chr(34) & Chr(32) & Chr(34) & Param & Chr(34) &_ Chr(32) & Chr(34) & TPath & FSO.GetFileName(Param) & Chr(34) & " /e" ,2,True Loop
ListFile.Close : Set ListFile = Nothing : WsEnd Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function Sub WsEnd : Set FSO = Nothing : Set WSH = Nothing : WScript.Quit : End Sub
Конвертирование ВЫДЕЛЕННЫХ "текстовых" файлов ПО ОЧЕРЕДИ программой ABCtext.exe Скачать ABCtextConverter
Code
' RunSelectInABCTextConverter.vbs '======================== Описание ===================================== ' Конвертирование ВЫДЕЛЕННЫХ "текстовых" файлов ПО ОЧЕРЕДИ программой ABCtext.exe '======================== Параметры ===================================== ' 1-й параметр: Cписок файлов ' 2-й параметр: путь\куда\конвертировать ' 3-й параметр: расширение ABC ' 4-й параметр: параметр1 ABC ' 5-й параметр: параметр2 ABC ' Дополнительные 3, 4, 5 параметры необходимо смотреть в справке программы '======================== Примеры ===================================== ' %L %t "pdf" 3 0 - Конвертация .TXT под курсором в .PDF ' %L %t "txt" 0 5 - Конвертация .HTML .HTM .MHT под курсором в .TXT (ANSI) ' %L %t "html" 7 1 - Конвертация .DOC .DOCX .RTF под курсором в .HTML ' ' Автор: Аверин Андрей ' Версия: 1.2 (07.10.2010 - 08.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru
Option Explicit '==================== Изменяемые пути ================================== Program = "%COMMANDER_PATH%\Utilities\Texts\AbcText\Abctext.exe" '======================================================================== If WScript.Arguments.Count < 5 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть минимум ПЯТЬ параметра" & vbNewLine &_ "Примкр: %L %t ''html'' 7 1", vbOKOnly & vbInformation,_ "Конвертирование выделенных ''текстовых'' файлов" WScript.Quit End If
Dim FSO, WSH, ListFile, Program, Param, TPath, Name, Ext, P1, P2 Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("WScript.Shell")
Program = GetPath(Program) If Not FSO.FileExists(Program) Then MsgBox "Не правильно указан путь до Abctext.exe", vbOKOnly & vbInformation,_ "Конвертирование выделенных ''текстовых'' файлов" WsEnd End If
With WScript TPath = .Arguments(1) : Ext = .Arguments(2) : P1 = .Arguments(3) : P2 = .Arguments(4) Set ListFile = FSO.OpenTextFile(GetPath(.Arguments(0)), 1) End With
Do While Not ListFile.AtEndOfStream Param = ListFile.ReadLine : Name = FSO.GetBaseName(Param) WSH.Run Chr(34) & Program & Chr(34) & Chr(32) & Chr(34) & Param & Chr(34) &_ Chr(32) & Chr(34) & TPath & Name & "." & Ext & Chr(34) & Chr(32) & P1 & Chr(32) & P2 ,2,True Loop
ListFile.Close : Set ListFile = Nothing : WsEnd Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function Sub WsEnd : Set FSO = Nothing : Set WSH = Nothing : WScript.Quit : End Sub
' RunStopRestart.vbs '======================== Описание ===================================== ' Запуск\Остановка\Перезапуск программы '======================== Параметры ===================================== ' 1-й параметр: полный\путь\к\программе.exe ' 2-й параметр: ' 0 - Перезапуск программы, если она запущена ' 1 - Завершает процесс программы ' 2 - Запускает второй экземпляр, третий, четвёртый.... ' 3 - Запускает или завершает ' 4 - Запускает, если процесс не запущен и не запускает, если запущен '======================== Примеры ===================================== ' "%%WINDIR%%\SYSTEM32\notepad.exe" 3 - вкл\выкл блокнота ' "%%COMMANDER_PATH%%\TOTALCMD.EXE" - перезапуск ТС, если он запущен ' ' Автор: Аверин Андрей ' Версия: 1.1 (09.11.2011 - 14.01.2012) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================================= Count = 0 : Title = "Запуск\Остановка\Перезапуск программы" With WScript Cnt = .Arguments.Count If Cnt > 0 Then Program = .Arguments(0) If Cnt > 1 Then Count = .Arguments(1) Else MsgBox "Не хватает параметров!" & vbNewLine &_ "Должен быть минимум ОДИН параметра" & vbNewLine &_ "Полный путь к программе", vbOKOnly & vbInformation, Title .Quit End If End With
With CreateObject("Scripting.FileSystemObject") If Not .FileExists(CreateObject("WScript.Shell").ExpandEnvironmentStrings(Program))Then MsgBox "Указанная программа не обнаружена", vbOKOnly & vbInformation, Title WScript.Quit End If Name = .GetFileName(Program) End With
If Count <> 2 Then For Each Proc In GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Process") If LCase(Proc.Name) = LCase(Name) Then If Count <> 4 Then Proc.Terminate cEnd = 1 : Exit For End If Next End If
Select Case Count Case 0 If cEnd = 1 Then ProgramRun Case 2 ProgramRun Case 3 If cEnd = 0 Then ProgramRun Case 4 If cEnd = 0 Then ProgramRun End Select
Sub ProgramRun : CreateObject("WScript.Shell").Exec(Program) : WScript.Quit : End Sub
Option Explicit '==================== Изменяемые пути ================================== Program = "%COMMANDER_PATH%\Plugins\Wdx\TextSearch\Conv\OdfToTxt\OdfToTxt.exe" '======================================================================== If WScript.Arguments.Count < 2 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть минимум ДВА параметра %L %t",_ vbOKOnly & vbInformation, "Конвертирование выделенных файлов OpenOffice" WScript.Quit End If
Dim FSO, WSH, ListFile, Program, Param, TPath, Name Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("WScript.Shell")
Program = GetPath(Program) If Not FSO.FileExists(Program) Then MsgBox "Не правильно указан путь до OdfToTxt.exe" & vbNewLine &_ "скачать http://wincmd.ru/plugring/TextSearch.html", vbOKOnly & vbInformation,_ "Конвертирование выделенных файлов OpenOffice" WsEnd End If
TPath = WScript.Arguments(1) Set ListFile = FSO.OpenTextFile(GetPath(WScript.Arguments(0)), 1)
Do While Not ListFile.AtEndOfStream Param = ListFile.ReadLine : Name = FSO.GetBaseName(Param) WSH.Run Chr(34) & Program & Chr(34) & Chr(32) & Chr(34) & Param & Chr(34) & Chr(32) & Chr(34) &_ "/ANSI" & Chr(34) & Chr(32) & Chr(34) & "/Out=" & TPath & Name & ".txt" & Chr(34) , 2, True Loop
ListFile.Close : Set ListFile = Nothing : WsEnd Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function Sub WsEnd : Set FSO = Nothing : Set WSH = Nothing : WScript.Quit : End Sub
Выделить нужное к-во папок и файлов в активной панели Используется NirCmd.exe и TCMC.exe - файлы можете скачать в шапке темы
Code
' MarkerN.vbs '======================== Описание ========================== ' Выделить нужное количество папок и файлов в активной панели ' Выделяет так же в окне после поиска и при cm_DirBranch '======================== Параметры ========================== ' 1-й параметр: Условия выделения. Может принимать значения: ' 1 - Выделение СВЕРХУ вниз ' 2 - Выделение СНИЗУ вверх ' 3 - Выделение от курсора ВНИЗ ' 4 - Выделение от курсора ВВЕРХ ' 2-й параметр: КОЛИЧЕСТВО выделяемых файлов '======================== Примеры ========================== ' без параметров - условия вводятся в диалоге ' 1 10 ' 2 50 ' 3 100 ' 4 80 ' ' Автор: Аверин Андрей ' Версия: 1.8 (02.11.2010 - 20.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================== Изменяемые пути ==================== Program = "%COMMANDER_PATH%\NirCmd.exe" MZList = "%COMMANDER_PATH%\Files\Lists\MarkerList\MarkerList.txt" ' любой файл для записи выделения TCMC = "%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe" '============================================================= Titles = "Выделение Файлов и Папок " With WScript Cnt = WScript.Arguments.Count If Cnt < 1 Then Num = InputBox("Введите параметр (ЧИСЛО) нужного Вам выделения:" & vbNewLine &_ "{1} - Выделение СВЕРХУ вниз" & vbNewLine & "{2} - Выделение СНИЗУ вверх" &_ vbNewLine & "{3} - Выделение от курсора ВНИЗ" & vbNewLine &_ "{4} - Выделение от курсора ВВЕРХ", Titles, 1) Else Num = .Arguments(0) End If If Len(CStr(Num)) = 0 Or Num < 1 Or Num > 5 Then .Quit If Cnt < 2 Then N = InputBox("Введите КОЛИЧЕСТВО выделяемых файлов и папок" , Titles, 10) Else N = .Arguments(1) End If If Len(N) = 0 Then .Quit End With
Dim WSH Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = WScript.CreateObject("WScript.Shell")
Select Case Num Case 1 RunTCMC("CM523") Case 2 CntrStr = 1 : RunTCMC("CM523") Case 3 WSH.SendKeys "+{END}" Case 4 CntrStr = 1 : WSH.SendKeys "+{HOME}" End Select
If UBound(Data) < 3 Then WsEnd For i = 0 To N - 1 If CntrStr = 0 Then M = i Else M = UBound(Data) - i End if TextZ = TextZ & Data(M) & vbNewLine If i = UBound(Data) Then Exit For Next
RunTCMC("CM2029") gPath = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") If Len(gPath) > 0 Then gPath = gPath & "\" : TextZ = Replace(TextZ, gPath , "", 1, -1, 1) End If Program = GetPath(Program) : MZList = GetPath(MZList) FSO.CreateTextFile(MZList, True).Write(TextZ) WSH.Run Chr(34) & Program & Chr(34) & Chr(32) & "clipboard readfile " & Chr(34) & MZList & Chr(34), 2, True
WScript.Sleep 200 : RunTCMC("CM2033") : WScript.Sleep 200 Select Case Num Case 1,3 RunTCMC("CM2054") Case 2,4 RunTCMC("CM2053") End Select WsEnd
Sub MsError MsgBox "Введены не правильные параметры" , vbOKOnly & vbInformation, Titles : Wscript.Quit End Sub
Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function Sub WsEnd : Set WSH = Nothing : Set FSO = Nothing : WScript.Quit : End Sub Sub RunTCMC(Param) : WSH.Exec(Chr(34) & TCMC & Chr(34) & Chr(32) & Chr(34) & Param & Chr(34)) : End Sub
Andrey_A, за тему спасибо, есть за что зацепиться. В TotalCmd уже с год пользуюсь скриптом для симметричного открытия папок флеш - винт, но написал его на AutoIt'е. Здесь у Вас задействованы - .vbs, может мой не в тему. Если интересно могу выложить, вдруг кому пригодится.
PRVVN,Я организовал её потому, стал переписывать свои скрипты, но даже "хорошо" написанный скрипт\программа должна пройти испытание\тестирование в разных условиях, не всегда есть возможность это сделать самому. Это тема для всех,каждыйможет выложить скрипт на любом языке, главное, чтобы он относился как-то к Total Commander'y, можно было им воспользоваться и к нему было должное описание к применению.
Quote (PRVVN)
Если интересно могу выложить, вдруг кому пригодится
Имеются 2 флешки, 8 Gbt с информацией из Internet по месяцам и 32 Gbt с данными. Структура данных, на флешке симметрична с винтом, но на флешке добавлена буква раздела винта, пример: винт - E:\Inst_My\Scripts\AutoIt\Month-tab\ флеш - E\Inst_My\Scripts\AutoIt\Month-tab\ Открытия папок флеш - винт. Проверка наличия флешки. Считывание пути под курсором. Открытие в панелях: флеш всегда левая, винт правая.
Code
;Имя файла скрипта: Any_Drive_All.au3 ;======================== Описание ===================================== ;Симметричное открытие папок флеш <> винт. Для данных - Transcend 32, для папок ;Мои_док01-12 - Transcend 8. Определение флешек по наличию файла, лежащего ;в корне: у Transcend 32 - Transcend 32.txt, у Transcend 8 - Transcend 8.txt ;Флешка всегда открывается в левой панели, а винт в правой. Структура данных, ;сохраненных на флешке симметрична с винтом, но на флешке добавлена буква раздела винта, пример: ;винт - E:\Inst_My\Scripts\AutoIt\Month-tab\ ;флеш - E\Inst_My\Scripts\AutoIt\Month-tab\ ;======================== О скрипте =================================== ; Автор: PRV (Владимир Пробенков) ; Версия: 3.0 (18.11.2011) ; Mail: prvlad@bmail.ru ;Изменения в версии: ;Определение окна TCmd по классу - CLASS:TTOTAL_CMD ;Определение пути запуска TCmd через запущенный процесс - 'TOTALCMD.EXE' ;====================================================================== ;---------Назначение глобальных скрипта Global $Title = '[CLASS:TTOTAL_CMD]', $Title2 = '', $file8 = 'Transcend 8.txt', $file32 = 'Transcend 32.txt' ;---------Назначение общих функций AutoIt AutoItSetOption('WinSearchChildren', 1) ;Активируем просмотр при поиске окон верхнего уровня и их потомков. AutoItSetOption('WinTitleMatchMode', 4) ;Способ сопоставления образца с заголовком окна при поиске (пользовательский режим). ;--------- If WinExists(@ScriptName) Then Exit ;Предотвратить множественный запуск одного и того же скрипта AutoItWinSetTitle(@ScriptName) ;*****************************вставка для теста ;Взаимозависимость процесса и командной строки $CommandString='TOTALCMD.EXE' ; процесс активированный Total Commander'ом $objService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") ; Задаём параметры объекта $colProc = $objService.ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE '%" & $CommandString & "%'") ; Цикл по элементам объекта-коллекции For $Proc In $colProc $result_f = $Proc.CommandLine ;Msgbox(0, "Обнаружен процесс" , $result_f) ; 1-е - запущенный процесс 2-е - ком.строка, его запустившая $len = StringLen($Proc.CommandLine) ;Возвращает общее количество знаков строки $result_g = StringInStr($result_f, $CommandString) ;Ищу вхождение TOTALCMD.EXE в строку (кол-во знаков слева до TOTALCMD.EXE) $len_t = StringLen($CommandString) ;Возвращает общее количество знаков в имени TOTALCMD.EXE $result_k = $result_g + $len_t ;К кол-ву знаков слева прибавляю кол-во знаков в имени экзешника - TOTALCMD.EXE $res_vich = $len - $result_k ;Возвращает количество знаков до конца строки после TOTALCMD.EXE $res_right1 = StringTrimRight($result_f, $res_vich) ;Удалить строку до конца после TOTALCMD.EXE $Pa6=$res_right1 ;Полный путь до TOTALCMD.EXE включительно
Next
If WinActive($Title) = 0 Then MsgBox(0, 'Gen_01 | Внимание!', 'Активированный Total Commander отсутствует', 10) Exit EndIf
Send ('{HOME}') ;гарантия установки курсора на верх.пустую строку папки Send('+{F6}');Shift+F6 - автивирую строку текущего каталога Sleep(50) ;для четкого срабатывания не < 50 sec. Send("^{INS}", 0 ) ;копирую полный путь в буфер - в конце слэш! ;=========================== ;=========================== Gen - Transcend 8 & Transcend 32 ;---------Общий и для 8 и для 32 Gbt - Из буфера путь поместить в переменную $Gen = ClipGet() $Gen_01 = $Gen $Gen_result_v = StringInStr($Gen_01, ":\Мои_док-") ;D:\Moи_дoк-06\ винчестер (вхождение слева - 2) $Gen_result_f = StringInStr($Gen_01, "D\Мои_док-") ;H:\D\Moи_дoк-06\ флешка (вхождение слева - 4) If $Gen_result_v = 2 OR $Gen_result_f = 4 Then ;есть вхождение в путь "Мои_док-" винт или флешка все равно должна определяться буква флешки
;=========================== ;=========================== T8_MD - Transcend 8 "Мои_док-" ;---------Поиск флэшки по наличию файла Transcend 8.txt в ее корне $TagFile = $file8 $i = 67 If not @error Then While FileExists( Chr($i) & ":\" & $TagFile ) = 0 AND $i<=90 $i = $i + 1 WEnd $drive = Chr($i) & ":" ;имею подключенный флеш Transcend 8 с буквой - H: $drive_v = Chr($i) & ":" ;подключенный флеш - H: $drive_f = Chr($i) & ":\" ;подключенный флеш - H:\ If $drive <> '[:' Then ;при отсутствии Flash выкидывает '[:' и сообщает об ошибке If $Gen_result_v = 2 Then ;D:\Moи_дoк-05\ 2-я позиция : - винчестер ;---------Редактирую путь $T8_MD_01 = $Gen_01 ;получаю путь без кавычек - D:\Moи_дoк-10\ $T8_MD_02 ='"'&$T8_MD_01&'"' ;обношу двумя кавычками, имею - "D:\Moи_дoк-10\" $T8_MD_03 = $Gen_01 $T8_MD_04 = StringReplace($T8_MD_03, ":", "") ;удаляю ":" в пути, имею - D\Moи_дoк-10\ $T8_MD_05 = $drive_f&$T8_MD_04 ;формирую путь к флешке, добавив в начало H:, имею - H:\D\Moи_дoк-10\ $T8_MD_06 ='"'&$T8_MD_05&'"' ;обношу кавычками "H:\D\d\Moи_дoк-10\" ;---------Переоткрываю в Total Commander в заданных панелях ;FileChangeDir(@ProgramFilesDir &"\Total Commander\" ) Run($Pa6&" /O /L="&$T8_MD_06&" /R="&$T8_MD_02) Sleep(250) ;=>150 - возможно увеличение времени при неуверенном открытии папки в противоположн. панели Send("{ESC}") ; убрать из строки текущего каталога Exit EndIf If $Gen_result_f = 4 Then ;H:\D\Moи_дoк-06\ флешка ;---------Редактирую путь $T8_MD_11 = $Gen_01 ;получаю путь без кавычек H:\D\Moи_дoк-10\ $T8_MD_12 ='"'&$T8_MD_11&'"' ;обношу двумя кавычками "H:\D\Moи_дoк-10\" $T8_MD_13 = StringTrimLeft($T8_MD_12, 5) ;удаляю 5 знаков с начала, имею - \Moи_дoк-10\" $T8_MD_14 = "D:"&$T8_MD_13 ;добавляю в начало D: имею - D:\Moи_дoк-10\" $T8_MD_15 ='"'&$T8_MD_14&'"' ;обношу двумя кавычками, имею - "D:\Moи_дoк-10\" ;---------Переоткрываю в Total Commander в заданных панелях ;FileChangeDir(@ProgramFilesDir &"\Total Commander\" ) Run($Pa6&" /O /L="&$T8_MD_12&" /R="&$T8_MD_15) Sleep(250) ;=>150 - возможно увеличение времени при неуверенном открытии папки в противоположн. панели Send("{ESC}") ; убрать из строки текущего каталога Exit EndIf Exit EndIf MsgBox(0, "ERROR | Flash 8", "Не могу определить флешку. Transcend 8 не подключена!") Exit EndIf MsgBox(0, "83 | Flash 8", "Не нахожу подключенной флешки 8 Gbt!") Exit EndIf ;MsgBox(0, "ERROR | Flash 8", "Под курсором нет в пути ""\Мои_док-""" ) ;нету вхождения в полный путь "Мои_док-" ;Exit
;=========================== ;=========================== T32_MD - Transcend 32 C\D\E\F\G\H\ что характеризует - H:\E\Inst_My у винта - E:\Inst_My\R02 ;---------Поиск флэшки по наличию файла Transcend 32.txt в ее корне $TagFile = $file32 $i = 67 If not @error Then While FileExists( Chr($i) & ":\" & $TagFile ) = 0 AND $i<=90 $i = $i + 1 WEnd $drive = Chr($i) & ":" ;имею подключенный флеш Transcend 32 с буквой - K: $drive_v_da = Chr($i) & ":\" ;подключенный флеш - K:\ $drive_f_da = Chr($i) & ":" ;подключенный флеш - K: If $drive <> '[:' Then ;при отсутствии Flash выкидывает '[:' и сообщает об ошибке $result_f = StringInStr($Gen_01, $drive_v_da) ;ищу вхождение подстроки "H:\" $drive_v_da в полный путь If $result_f = 1 Then ;---------Редактирую путь $T32_MD_01 = $Gen_01 ;K:\E\Inst_My\ $T32_MD_02 ='"'&$T32_MD_01&'"' ;обношу двумя кавычками, имею - "K:\E\Inst_My\" $T32_MD_03 = StringTrimLeft($T32_MD_01, 3);удаляю 3 символа начала, имею - E\Inst_My\ $T32_MD_04 = StringReplace($T32_MD_03, "\", ":\", 1) ;меняю "\" в пути на "\:" 1 раз, имею - E:\Inst_My\ $T32_MD_05 ='"'&$T32_MD_04&'"' ;обношу двумя кавычками, имею - "E:\Inst_My\" ;---------Переоткрываю в Total Commander в заданных панелях ;FileChangeDir(@ProgramFilesDir &"\Total Commander\" ) Run($Pa6&" /O /L="&$T32_MD_02&" /R="&$T32_MD_05) Sleep(250) ;=>150 - возможно увеличение времени при неуверенном открытии папки в противоположн. панели Send("{ESC}") ; убрать из строки текущего каталога Exit EndIf ; $result77 = StringInStr($Gen_01, $drive_v_da) ;ищу вхождение подстроки "E:\" в полный путь If $result_f = 0 Then ;"K:\" $drive_v_da Transcend 32 ;---------Редактирую путь $T32_MD_10 = $Gen_01 ;курсор стоял на винте, имею - E:\Inst_My\ $T32_MD_11 ='"'&$T32_MD_10&'"' ;обношу двумя кавычками имею - "E:\Inst_My\" $T32_MD_12 = StringReplace($T32_MD_10, ":", "", 1) ; удалить ":" в пути, имею - E\Inst_My\ $T32_MD_13 = $drive_v_da&$T32_MD_12 ;добавляю букву флешки, имею - K:\E\Inst_My\ $T32_MD_14 ='"'&$T32_MD_13&'"' ;обношу двумя кавычками, имею - "K:\E\Inst_My\" ;---------Переоткрываю в Total Commander в заданных панелях ;FileChangeDir(@ProgramFilesDir &"\Total Commander\" ) Run($Pa6&" /O /L="&$T32_MD_14&" /R="&$T32_MD_11) ;Рабочий Sleep(250) ;=>150 - возможно увеличение времени при неуверенном открытии папки в противоположн. панели Send("{ESC}") ; убрать из строки текущего каталога
Exit EndIf ; Exit EndIf ; MsgBox(0, "ERROR | Flash 32", "Не могу определить флешку. Transcend 32 не подключена!") Exit
;EndIf ;при False приходит от - If $Gen_result_v = 2 OR $Gen_result_f = 4 Then MsgBox(0, "ERROR | Flash 32", "Под курсором нет в пути ""\Мои_док-""" ) ;нету вхождения в полный путь "Мои_док-" Exit
Выделяет папки\файлы по количеству символов в именах, которое задаётся условием Используется NirCmd.exe и TCMC.exe - файлы можете скачать в шапке темы
Code
' MarkerNamesSymN.vbs '======================== Описание ======================================= ' Выделяет папки\файлы по количеству символов в именах, которое задаётся условием ' Выделяет так же в окне после поиска и при cm_DirBranch '======================== Параметры ======================================= ' 1-й параметр: Условия поиска для выделения. Может принимать значения: ' "0" - условия вводятся в диалоге ' "=N" - выделяет файлы\папки, в именах которых N символов ' "<N" - выделяет файлы\папки, в именах которых меньше N символов ' ">N" - выделяет файлы\папки, в именах которых больше N символов ' 2-й параметр: %L '======================== Примеры ====================================== ' без параметров - выделяет все имена в текущей панели, в которых встречается условие, введённое в диалоге ' "<5" - выделяет все имена в текущей панели, в которых меньше 5 символов ' "0" %L - выделяет все имена в выделенном, в которых встречается условие, введённое в в диалоге ' "=6" %L - выделяет все имена в выделенном, в которых 6 символов ' ' Автор: Аверин Андрей ' Версия: 1.3 (17.12.2010 - 20.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru
Dim FSO, WSH, zText, Stroka, i, gPath, Data Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = WScript.CreateObject("WScript.Shell") '======================== Изменяемые пути ================================= Program = "%COMMANDER_PATH%\NirCmd.exe" MzList = "%COMMANDER_PATH%\Files\Lists\MarkerList\MarkerList.txt"' любой файл для записи выделения TCMC = "%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe" '========================================================================== Title = "Выделение файлов и папок по к-ву символов" With WScript Cnt = .Arguments.Count If Cnt > 0 Then Stroka = .Arguments(0) If Stroka = "0" Then MsBoxx Else MsBoxx End If If Cnt > 1 Then FF = FSO.OpenTextFile(.Arguments(1), 1).ReadAll Else RunTCMC("CM523") : .Sleep 200 RunTCMC("CM2018") : .Sleep 200 FF = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") WSH.SendKeys "{HOME}" End If End With
Sym = Mid(Stroka, 1, 1) Num = CInt(Replace(Stroka, Sym, "")) Data = Split(FF, vbNewLine)
If UBound(Data) < 2 Then WsEnd RunTCMC("CM2029") gPath = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") For i = 0 To UBound(Data) Name = FSO.GetBaseName(Data(i)) : ln = Len(Name) Select Case Sym Case "=" if ln = Num Then TextW Case ">" if ln > Num Then TextW Case "<" if ln < Num Then TextW Case Else WSH.Popup "Введено неправильное условие для выделения" & vbNewLine &_ "Повторите заново!", 2, Title, 64 WsEnd End Select Next
If Len(zText) = 0 Then RunTCMC("CM524") WSH.Popup "Имён с длиной " & Stroka & " не найдено", 2, Title, 64 WsEnd End If
Sub MsBoxx Stroka = InputBox("Введите Условие поиска по к-ву символов в" & vbNewLine &_ "именах файлов для дальнейшего выделения" & vbNewLine &_ "Может быть 3 условия, Примеры:" & vbNewLine &_ "=5 выделяются имена, в которых 5 символов" & vbNewLine &_ "<5 выделяются имена, меньше 5 символов" & vbNewLine &_ ">5 выделяются имена, больше 5 символов" , Title, "=8") if Len(Stroka) = 0 Then WSH.Popup "Не введены условия для выделения!" & vbNewLine &_ "Повторите заново!", 2, Title, 64 WsEnd End If WScript.Sleep 100 End Sub
Sub TextW If Len(gPath) > 0 Then gPath = gPath & "\" Data(i) = Replace(Data(i), gPath , "", 1, -1, 1) End If zText = zText & Data(i) & vbNewLine End Sub
Sub RunTCMC(Param) : WSH.Exec(Chr(34) & TCMC & Chr(34) & Chr(32) & Chr(34) & Param & Chr(34)) : End Sub Sub WsEnd : Set WSH = Nothing : Set FSO = Nothing : WScript.Quit : End Sub Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function
Дата: Суббота, 12.11.2011, 04:40 | Сообщение # 100
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Сохранение выделенного в файл с дополнительными условиями Так же есть возможность отправлять преобразованное выделение в буфер Используется TCMC.exe и NirCmd.exe - файлы можете скачать в шапке темы
Code
' SaveSelection.vbs '======================== Описание ==================================== ' Сохранение выделенного в файл с дополнительными условиями в два файла: ' - один файл для дальнейшей загрузки выделения MakerList.txt ' - другой с полными путями MarkerPathList.txt ' Так же есть возможность отправлять преобразованное выделение в буфер обмена '======================== Параметры ==================================== ' 1-й параметр: %L (обязательный) ' 2-й параметр: К-во подряд выделяемых элементов ' 3-й параметр: К-во пропущенных элементов после выделения ' 4-й параметр: Любой, означает, что выделение будет + отправлено в буфер '======================== Примеры ==================================== ' %L - сохранение выделения в файл ' %L 1 1 - сохраняет выделение через одну строчку, что позволит загрузить выделение зеброй ' %L 1 5 - сохраняет выделение каждого пятого файла ' %L 2 3 - сохраняет выделение 2 через 3 ' %L 0 0 1 - отправить выделение в буфер ' %L 1 1 1 - отправить выделение через одну строчку в буфер ' Автор: Аверин Андрей ' Версия: 1.8 (2010 - 22.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================== Изменяемые пути =============================== Program = "%COMMANDER_PATH%\NirCmd.exe" TCMC = "%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe" MarkerList = "%COMMANDER_PATH%\Files\Lists\MarkerList\MarkerList.txt" ' любой файл для записи выделения PathList = "%COMMANDER_PATH%\Files\Lists\MarkerList\MarkerPathList.txt" ' любой файл для записи путей '====================================================================== Count = WScript.Arguments.Count If Count < 1 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должен быть минимум ОДИН параметр: %L" , vbOKOnly &_ vbInformation, "Сохранение выделенного в файл" Wscript.Quit End If
Dim FSO, WSH Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = WScript.CreateObject("WScript.Shell")
TextPath = FSO.OpenTextFile(WScript.Arguments(0), 1).ReadAll RunTCMC("CM2029") gPath = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") If Len(gPath) > 0 Then gPath = gPath & "\" TextPath = Replace(TextPath, gPath , "", 1, -1, 1) End If TextMarker = TextPath
If Count > 2 Then N = CInt(WScript.Arguments(1)) : M = CInt(WScript.Arguments(2)) If N > 0 Or M > 0 Then DataP = Split(TextPath, vbNewLine) : DataM = Split(TextMarker, vbNewLine) If UBound(DataP) > N + 1 Then N = N - 1 For i = 0 To UBound(DataP) Step N + M + 1 On Error Resume Next For j = i To i + N TextMarkerN = TextMarkerN & DataM(j) & vbNewLine TextPathN = TextPathN & DataP(j) & vbNewLine Next If i > UBound(DataP) Then Exit For Next TextMarker = TextMarkerN : TextPath =TextPathN End if End If End if MarkerList = GetPath(MarkerList) : PathList = GetPath(PathList) FSO.CreateTextFile(MarkerList, True).Write(TextMarker) ' Сохраняем выделение в файл FSO.CreateTextFile(PathList, True).Write(TextPath) ' Сохраняем пути в файл If Count > 3 Then WSH.Run Chr(34) & Program & Chr(34) & " clipboard readfile " & Chr(34) & MarkerList & Chr(34), 2, True Set WSH = Nothing : Set FSO = Nothing : WScript.Quit Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function Sub RunTCMC(Param) : WSH.Exec(Chr(34) & TCMC & Chr(34) & Chr(32) & Chr(34) & Param & Chr(34)) : End Sub