Скрипты - уникальный инструмент для достижения различных целей в работе с файлами и не только, особенно в файловом менеджере, даже если вы ничего раньше об этом ничего не слышали и не знали, то путём простых движений вы можете оптимизировать свои действия Тема тестирования скриптов создана для увеличения функциональности 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 скачайте и положите туда эти файлы:
Скачать FunctionsPlus.vbs (Версия: 2.3 от 22.03.2012) - файл с различными функциями, которые можно использовать в других скриптах Скачать FunctionsINIRWS.vbs (Версия: 1.4 от 19.03.2012) - файл с функциями чтения и записи INI файлов + FunctionsINITextRWS.vbs Дополнительные скрипты для TC Image
2. В связи с избавлением от WSHelper в ряде скриптов участвуют следующие утилиты
NirCmd - утилита помогающая выполнить некоторые полезные задачи, в частности работа с буфером обмена
TCFS2 - Утилита позволяет управлять режимами окна
Скачать:TCMCWindow (Версия 1.3 от 31.01.2012) Скачать:TCMCWindow (Версия 1.5. от 22.03.2012)
Что может утилита совместно с TCMC - посылать команды Total Commander - посылать клавиатурные нажатия окнам - вводить строки в окна - посылать текст в буфер обмена - возвращать текст из буфера обмена - устанавливать необходимую паузу между любыми действиями
Описание прилагается в архиве с программой Так же в архиве лежит утилита TCMC
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Переход в параллельный каталог не заходя в родительский Используется TCMC.exe - файл можете скачать в шапке темы
Code
' GoParallelDirectory.vbs '======================== Описание ===================================== ' Переход в параллельный каталог не заходя в родительский
If CreateObject("Scripting.FileSystemObject").FolderExists(Path2) Then If (StrComp(Path1, Path2 ,vbTextCompare) <> 0) Then RunTCMC("CM2003") Else intButtonClicked = MsgBox ("В этой панели папок больше нет!" & vbNewLine &_ "Хотите начать cначала?" , 33, Titles) If intButtonClicked = 1 Then WSH.SendKeys "{HOME}" & "{DOWN}" : WScript.Sleep 200 : RunTCMC("CM2003") Else WsEnd End If End If Else intButtonClicked = MsgBox ("Папки закончились, остались только файлы!" & vbNewLine &_ "Хотите начать cначала?" , 33, Titles) If intButtonClicked = 1 Then WSH.SendKeys "{HOME}" & "{DOWN}" : WScript.Sleep 200 : RunTCMC("CM2003") Else WsEnd End If End If
WsEnd
Sub WsEnd : Set WSH = Nothing : WScript.Quit : End Sub Sub RunTCMC(Comm) : WSH.Exec(TCMC & " 50 " & Comm) : End Sub
Function GetClip On Error Resume Next GetClip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") End Function
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
' SummaFoldersInFolder.vbs '================================================== ' Подсчет количества вложенных папок (без рекурсии) ' В параметрах вызова из TC должно быть прописано: ' %L ' Автор: Batya ' Версия: 1.0 (19.07.2005) '================================================== Dim FSO, StrInFile, SF, M1, TempFile Set FSO = CreateObject("Scripting.FileSystemObject") Set TempFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
SF = 0 Do While Not TempFile.AtEndOfStream StrInFile = TempFile.ReadLine If FSO.FolderExists(StrInFile) Then SF = SF + FSO.GetFolder(StrInFile).SubFolders.Count End If Loop
If SF > 0 Then MsgBox "В выделенных каталогах находится" & chr(13) & SF & chr(13) &_ "вложенных папок в Первом уровне", vbOKOnly + vbInformation, "Результат" Else MsgBox "В выделенных каталогах нет вложенных папок", vbOKOnly + vbExclamation, "Внимание!" End If
Set TempFile = Nothing Set FSO = Nothing Wscript.Quit
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Сообщение отредактировал Andrey_A - Среда, 26.10.2011, 23:46
Создание структуры каталогов вглубь и в ширину Используется TCMC.exe - файл можете скачать в шапке темы
Code
' StrukturaFolders.vbs '======================== Описание ======================================= ' Создание структуры каталогов вглубь и в ширину '======================== Параметры ======================================= ' 1-й параметр: путь\создания\каталогов ' 2-й параметр: имя создаваемых каталогов ' 3-й параметр: глубина создаваемых каталогов (1-10) ' 4-й параметр: количество создаваемых каталогов в каждом подкаталоге ' Два параметра обязательны!!! 3 и 4 можно ввести во всплывающих диалогах '======================== Примеры ======================================= ' %p "%O" - создать в текущей панели структуру именем файла\папки ' %t "Каталог" 3 5 ' ' Автор: Аверин Андрей ' Версия: 1.4 (2010 - 30.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '============================================================================ With WScript Cnt = .Arguments.Count If Cnt < 2 Then MsgBox "Неправильно указано количество параметров!" & vbNewLine &_ "Должно быть минимум ДВА параметра!" & vbNewLine &_ " ""%p"" ""%O"" A у Вас прописано " & Cnt &_ " !!! " , vbOKOnly & vbInformation, "Создание структуры каталогов" .Quit Else If Cnt > 2 Then D = .Arguments(2) Else If D = 0 or D = "" Then D = InputBox ("Введите ГЛУБИНУ создания каталогов" & vbNewLine &_ "( Цифру от 1 до 10 )" , "Создание структуры каталогов",1) If D = 0 or D = "" Then .Quit End If If Cnt > 3 Then N = .Arguments(3) Else If N = 0 or N = "" Then N = InputBox ("Введите КОЛИЧЕСТВО каталогов, создаваемых в каждом подкаталоге" ,_ "Создание структуры каталогов",1) If N = 0 or N = "" Then .Quit End If End If
Path = .Arguments(0) : FileName = .Arguments(1) End With
With CreateObject("Scripting.FileSystemObject") If Mid(Path,Len(Path),1) = "\" Then Path = Path Else Path = FSO.GetParentFolderName(Path) & "\" End If If Len(FileName) = 0 Then FileName = "Каталог"
If D > 0 Then For i = 1 To N NewFold1 = Path & Numer(1, i) : .CreateFolder(NewFold1) If D => 1 Then For m = 1 To N NewFold2 = NewFold1 &Numer;(2, m) : .CreateFolder(NewFold2) If D => 2 Then For k = 1 To N NewFold3 = NewFold2 & Numer(3, k) : .CreateFolder(NewFold3) If D => 3 Then For o = 1 To N NewFold4 = NewFold3 & Numer(4, o) : .CreateFolder(NewFold4) If D => 4 Then For p = 1 To N NewFold5 = NewFold4 & Numer(5, p) : .CreateFolder(NewFold5) If D => 5 Then For l = 1 To N NewFold6 = NewFold5 & Numer(6, l) : .CreateFolder(NewFold6) If D => 6 Then For r = 1 To N NewFold7 = NewFold6 & Numer(7, r) : .CreateFolder(NewFold7) If D => 7 Then For s = 1 To N NewFold8 = NewFold7 & Numer(8, s) : .CreateFolder(NewFold8) If D => 8 Then For t = 1 To N NewFold9 = NewFold8 & Numer(9, t) : .CreateFolder(NewFold9) If D => 9 Then For u = 1 To N NewFold10 = NewFold9 & Numer(10, u) : .CreateFolder(NewFold10) Next End If Next End If Next End If Next End If Next End If Next End If Next End If Next End If Next End If Next End If End With CreateObject("WScript.Shell").Exec("%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe 100 CM540") Wscript.Quit
Function Numer(nnn,iii) Numer = "\" & FileName & "_" & nnn & "_" & iii\ 100 & (iii Mod 100)\10 & (iii Mod 10) End Function
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Структурирование файла Wcmd_*.MNU главного меню Total Commanderа
Code
' StructuraMenuTC.vbs '=============================================================== ' Структурирование файла Wcmd_*.MNU главного меню Total Commanderа ' В параметрах вызова из TC должен быть прописано путь к файлу: ' "%%COMMANDER_PATH%%\Language\Wcmd_Rus.mnu" ' или открывать его под курсором %P%N ' ' Автор: Аверин Андрей ' Версия: 1.1 (19.09.2010 - 14.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '=============================================================== Option Explicit Dim FSO, ListFile, SetList, Text, i, k, sym, FF, F, P, L, ContrStr, Stroka, Probel, Space Set FSO = CreateObject("Scripting.FileSystemObject")
FF = WScript.Arguments(0) F = CreateObject("WScript.Shell").ExpandEnvironmentStrings(FF) Set ListFile = FSO.OpenTextFile(F, 1)
Space = 7 'изменить если нужен отступ больше или меньше Text = "" : ContrStr = 0 : P = 0
Do While Not ListFile.AtEndOfStream SetList = ListFile.ReadLine : Stroka = "" : Probel = ""
For i = 1 To Len(SetList) sym = Mid(SetList, i, 1) If sym = "P" Or sym = "M" Or sym = "E" Or sym = "S" Or sym = "H" Or sym = ";" Then If sym = ";" Then L = 0 k = i : i = Len(SetList) End If Next
If SetList <> "" Then For i = k To Len(SetList) sym = Mid(SetList, i, 1) : Stroka = Stroka & sym Next End If
If P < 0 Then P = 0
If Mid(Stroka, 1, 1) = "P" Then If ContrStr = 1 Then P = P + Space L = P : ContrStr = 1 End If
If Mid(Stroka, 1, 1) = "M" Then If ContrStr = 2 Then P = P - Space : ContrStr = 1 End If L = P + Space End If
If Stroka = "MENUITEM SEPARATOR" Then If ContrStr = 2 Then P = P - Space : ContrStr = 1 End If L = P + Space*2 End If
If Mid(Stroka, 1, 1) = "E" Then If ContrStr = 2 Then P = P - Space L = P : ContrStr = 2 End If
For i = 1 To L Probel = Probel & " " Next Text = Text & Probel & Stroka & vbNewLine : L = 0 Loop
For i = 1 To Len(Text) If Right(Text, Len(vbNewLine)) = vbNewLine Then Text = Left(Text, Len(Text) - Len(vbNewLine)) Else Exit For End If Next FSO.CopyFile F, F & ".bak" ' Раскомментируйте если нужна копия файла FSO.CreateTextFile(F, True).Write(Text)
ListFile.Close : Set ListFile = Nothing : Set FSO = Nothing : WScript.Quit
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
WArr = Array("Buttonbar", "Colors", "Searches", "Associations", "DirMenu", "CustomFields", _ "HintsCustomField", "Rename", "MkDirHistory", "SearchIn", "RenameTemplates", _ "Selection", "RenameSearchFind", "SearchName", "RenameSearchReplace", _ "RightHistory", "LeftHistory", "Command line history", "LeftTabs", "RightTabs", _ "SearchText", "OverWriteCustomField", "Left", "Right", "Extensions") For i = 0 To Ubound(WArr) WinCmd(WArr(i)) Next
Set FSO = Nothing : WScript.Quit
Sub WinCmd(Section) sKey = ReadINI(WCF, Section, "RedirectSection") If sKey <> "" Then If InStr(sKey, "/") > 0 Then sFile = sKey If Mid(sFile, 1, 1) = Chr(34) Then sFile = Mid(sFile, 2) If Mid(sFile, 1, Len(sFile)) = Chr(34) Then sFile = Left(sFile, Len(sFile) - 1) Else sFile = TC & "\" & sKey End If FS = ReadINISection(sFile, Section) If Len(FS) > 0 Then On Error Resume Next Call WriteINISection(WCF, Section, FS) Else Call WriteINI(WCF, Section, "RedirectSection", "<DELETE_VALUE>") End If End If End Sub
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
' CreateLink.vbs '======================== Описание ===================================== ' Создание ярлыка файла\папки под курсором '======================== Параметры ===================================== ' 1-й параметр: Путь\к\Файлу\папке для которой создаётся ярлык ' 2-й параметр: Путь\где\создавать\ярлык (по умолчанию Рабочий стол) ' (можно использовать относительные пути) '======================== Примеры ==================================== ' %P%N - создание ярлыка для файла\папки под курсором на рабочем столе ' %P%N "%%APPDATA%%\Microsoft\Internet Explorer\Quick Launch" - создание ярлыка для файла\папки под курсором в панели ''Быстрого запуска'' ' %P%N "%%APPDATA%%\Microsoft\Windows\SendTo" - создание ярлыка для папки под курсором в панели ''Отправить в...'' ' %P%N "%%USERPROFILE%%\Links" - создание ярлыка для папки под курсором в панели ''Ссылки на папки''
' Автор: Аверин Андрей ' Версия: 1.1 (18.07.2011 - 26.07.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================================== With WScript Cnt = .Arguments.Count If Cnt > 0 Then File = .Arguments(0) If Len(File) = 0 Then WScript.Quit If Cnt > 1 Then Path = .Arguments(1) End If End With
Dim FSO, WSH Set WSH = CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject")
If Len(Path) = 0 Then Path= WSH.SpecialFolders("Desktop") Else Path= GetPath(Path) End If File= GetPath(File)
Name = FSO.GetBaseName(File)
With WSH.CreateShortcut(Path & "\" & Name & ".lnk") ' Создаём ярлык .Arguments = "" .Description = "" .IconLocation = ",0" .TargetPath = File .WindowStyle = 1 .WorkingDirectory = FSO.GetParentFolderName(File) .Save End With
Set WSH = Nothing : Set FSO = Nothing : WScript.Quit Function GetPath(aPath) : GetPath = WSH.ExpandEnvironmentStrings(aPath) : End Function
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
' GroupChangeLNK.vbs '================ Описание ================= ' Групповая замена свойств ярлыков. '================ Параметры ================= ' {файл-список ярлыков}|{папка с ярлыками} ' ' Примеры параметров при вызове из TC: ' %L ' "%P" ' ' Автор - Batya ' Версия: 1.0 (22.10.2009) '========================================== Option Explicit Dim Mess, FSO, WSH, FF, IsFolder, F, FindStr, ReplStr, Res, Msg, K
On Error Resume Next Main:CheckErr On Error GoTo 0 If Res.Count > 0 Then For Each K In Res.Keys Msg = Msg & vbNewLine & vbNewLine & K & " - " & Res(K) Next Else Msg = vbNewLine & vbNewLine & Mess(10) End If WSH.Popup Mess(9) & Msg, 0, Mess(0) Quit 0
'Основная процедура Sub Main SetMess Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("WScript.Shell") Set Res = CreateObject("Scripting.Dictionary") F = ""
CheckParam
FindStr = InputBox(Mess(3), Mess(0)):If FindStr = "" Then Quit 0 ReplStr = InputBox(Mess(4), Mess(0)):If ReplStr = "" Then Quit 0
If IsFolder Then FolderProc FF Else For Each F In Split(FSO.OpenTextFile(FF).ReadAll, vbNewLine) If F <> "" Then F = GetPath(F) If FSO.FileExists(F) Then FileProc F ElseIf FSO.FolderExists(F) Then FolderProc F End If End If Next End If End Sub
'Массив сообщений Sub SetMess Set Mess = CreateObject("Scripting.Dictionary") With Mess .Add 0, "Групповая замена свойств ярлыков" .Add 1, "Не указаны параметры!" .Add 2, "Первый параметр не является файлом-списком или папкой!" .Add 3, "Введите искомый текст:" .Add 4, "Введите текст на замену:" .Add 5, "Выполнена замена:" .Add 6, "Возникла ошибка:" & vbNewLine .Add 7, "Возникла ошибка № " .Add 8, "Файл\папка:" .Add 9, "Результат операции:" .Add 10, "Замен не произошло." End With End Sub
'Проверка входных параметров Sub CheckParam If WScript.Arguments.Count = 0 Then Err.Raise vbObjectError + 1, "", Mess(1) FF = GetPath(WScript.Arguments(0)) If Not FSO.FileExists(FF) Then If Not FSO.FolderExists(FF) Then Err.Raise vbObjectError + 2, "", Mess(2) Else IsFolder = True End If Else IsFolder = False End If End Sub
'Обработка файла-ярлыка Sub FileProc(pPath) Dim lExt, LNK On Error Resume Next lExt = FSO.GetExtensionName(pPath) If LCase(lExt) = "lnk" Then Msg = "" With WSH.CreateShortcut(pPath) .TargetPath = ReplaceIn("TargetPath", .TargetPath) .IconLocation = ReplaceIn("IconLocation", .IconLocation) .WorkingDirectory = ReplaceIn("WorkingDirectory", .WorkingDirectory) .Description = ReplaceIn("Description", .Description) .Save End With If Msg <> "" Then Res.Add pPath, Mess(5) & Msg If Err.Number <> 0 Then Res.Add pPath, Mess(6) & " " & Err.Description Msg = "" End If On Error GoTo 0 End Sub
'Замена в строке Function ReplaceIn(pType, pStr) If InStr(1, pStr, FindStr, 1) > 0 Then Msg = Msg & vbNewLine & " " & pType & ": " & pStr & " -> " ReplaceIn = Replace(pStr, FindStr, ReplStr, 1, 1, 1) Msg = Msg & ReplaceIn Else ReplaceIn = pStr End If End Function
'Обработка папки Sub FolderProc(pPath) Dim loF Set loF = FSO.GetFolder(pPath) For Each F In loF.SubFolders F = F.Path FolderProc F Next For Each F In loF.Files F = F.Path FileProc F Next Set loF = Nothing End Sub
'Разложить путь при наличии переменных окружения Function GetPath(pPath) GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath)) End Function
'Проверка, нет ли ошибок Sub CheckErr Dim lMess lMess = Mess(7) & Err.Number & ":" & vbNewLine & Err.Description If F <> "" Then lMess = lMess & vbNewLine & vbNewLine & Mess(8) & vbNewLine & F If Err.Number <> 0 Then MessBox lMess, 1 Quit Err.Number End If End Sub
'Сообщение Function MessBox(pMess, pMode) Dim lIcon Select Case pMode Case 1 lIcon = vbCritical + vbOKOnly Case 2 lIcon = vbExclamation + vbOKOnly Case 3 lIcon = vbInformation + vbOKOnly End Select MessBox = MsgBox(pMess, lIcon, Mess(0)) End Function
'Выход Sub Quit(pExitCode) Set Mess = Nothing Set Res = Nothing Set WSH = Nothing Set FSO = Nothing WScript.Quit pExitCode End Sub
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Сообщение отредактировал Andrey_A - Четверг, 27.10.2011, 04:17
Помещает в буфер обмена заданный текст Используется NirCmd.exe - файл можете скачать в шапке темы
Code
' BufferGo.vbs '================== Описание ============================== ' Помещает в буфер обмена заданный текст '================= Параметры ============================== ' Параметр: "Любой Текст" '================== Примеры ============================== ' %E - помещает в буфер расширение ' "file:///%p%N" - создаёт ссылки на файлы ' "Привет" - отсылает в буфер "Привет"
' Автор: Аверин Андрей ' Версия: 1.1 (2010 - 27.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '============== Изменяемые пути ============================ NirCmd = "%COMMANDER_PATH%\NirCmd.exe" '=========================================================== If WScript.Arguments.Count > 0 Then With CreateObject("Scripting.FileSystemObject") Tmp = .GetSpecialFolder(2) & "\" & .GetTempName() .CreateTextFile(Tmp, True).Write WScript.Arguments(0) NirCmd = CreateObject("WScript.Shell").ExpandEnvironmentStrings(NirCmd) CreateObject("WScript.Shell").Run Chr(34) & NirCmd & Chr(34) & " " & "clipboard readfile " & Tmp , 2,True WScript.Sleep 1000 : .DeleteFile Tmp End With End If
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Собирает выделенные файлы в один Используется FunctionsPlus.vbs - файл можете скачать в шапке темы
Code
' SummaTextFiles.vbs '======================== Описание ===================================== ' Собирает выделенные текстовые файлы в один '======================= Параметры ===================================== ' 1-й параметр: Путь гда создавать общий файл ' 2-й параметр: Список путей файлов ' 3-й параметр: Имя создаваемого файла ' 4-й параметр: Разделитель между содержанием файлов '======================== Примеры ===================================== ' %p %L ' %p %L "All" ' %p %L "All" "========"
' Автор: Аверин Андрей ' Версия: 1.1 (14.09.2011 - 29.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '==================== Изменяемые пути ================================== FuncPlus = "%COMMANDER_PATH%\Scripts\Include\FunctionsPlus.vbs" '======================================================================== With WScript Cnt = .Arguments.Count If Cnt > 1 Then nFolder = .Arguments(0) tFile = .Arguments(1) If Cnt > 2 Then Name = .Arguments(2) If Cnt > 3 Then Delim = .Arguments(3) End If Else MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть прописано минимум 2 параметра %p %L",_ vbOKOnly & vbInformation, "Объединение файлов" .Quit End If
If Len(Name) = 0 Then Name = InputBox("Введите имя файла", "Объединение файлов", "All.txt") if Len(Name) = 0 Then .Quit End If End With
With CreateObject("Scripting.FileSystemObject") Execute .OpenTextFile(CreateObject("WScript.Shell").ExpandEnvironmentStrings(FuncPlus)).ReadAll Set TempFile = .OpenTextFile(tFile, 1) Do While Not TempFile.AtEndOfStream On Error Resume Next .OpenTextFile(FFNoExistCount(nFolder & Name), 8, True).Write .OpenTextFile(TempFile.ReadLine, 1).ReadAll & vbNewLine & Delim & vbNewLine Loop End With TempFile.Close : Set TempFile = Nothing : WScript.Quit
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
If Len(Clip) > 0 Then Name = Trim(Clip) If InStr(Clip, vbNewLine) > 0 Then Name = Split(Clip, vbNewLine)(0) CharArr = Array(vbCrLf,vbCr,vbLf,"\","/","*","?","""",">","<", Chr(32)) For i = 1 To Ubound(CharArr) If InStr(Name, CharArr(i)) > 0 Then Name = Replace(Name, CharArr(i),"_") Next With CreateObject("Scripting.FileSystemObject") Ext = .GetExtensionName(Path) If InStr(Name,".") = 0 And Len(Ext) > 0Then Name = Name & "." & Ext pPath = .GetParentFolderName(Path) On Error Resume Next If .FileExists(Path) Then .MoveFile Path, pPath & "\" & Name Else .MoveFolder Path, pPath & "\" & Name End If End With CreateObject("WScript.Shell").Exec("%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe 100 CM540") Else MsgBox "Скопируйте корректное имя и повторите команду ещё раз!", vbOKOnly &_ vbCritical , "Переименование файла имением из буфера" End if Wscript.Quit
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Создание в текущей папке для всех файлов с указанным расширением аналогичного файла с другим указанным расширением
Code
' NnulFilesExt1OnExt2.vbs '======================== Описание ===================================== ' Создание в текущей папке для всех файлов с указанным расширением ' аналогичного файла с другим указанным расширением '======================= Параметры ===================================== ' 1-й параметр: путь\к\папке ' 2-й параметр: расширение исходных файлов ' 3-й параметр: расширение создаваемых файлов ' если 2-й и 3-й параметр отсутствуют, их можно ввести в диалоге '======================== Примеры ===================================== ' %p ' %p mp3 txt ' Автор: Batya & Аверин Андрей ' Версия: 1.2 (10.05.2006 - 14.11.2011) ' Site: http://tc-image.3dn.ru '======================================================================== CurrentFolder = CreateObject("Shell.Application").NameSpace(WScript.Arguments(0)).Self.Path & "\" Titles = "Создание зеркальных файлов " Ext1 = InputBox("Введите РАСШИРЕНИЕ файла, которому" & vbNewLine &_ "будет делаться зеркальные файл(ы) в текущем каталоге." & vbNewLine &_ "Пример для ввода: mp3", Titles, "mp3") If Len(Ext1) = 0 Then WsEnd
Ext2 = InputBox("Введите РАСШИРЕНИЕ зеркальных файлов" & vbNewLine &_ "Пример для ввода: txt", Titles, "txt") If Len(Ext2) = 0 Then WsEnd
With CreateObject("Scripting.FileSystemObject") If Not .FolderExists(CurrentFolder) Then MB = MsgBox("Папка " & CurrentFolder &_ " не существует!", vbOKOnly + vbExclamation, Titles) : WScript.Quit End If
For Each oFile in .GetFolder(CurrentFolder).Files If .GetExtensionName(oFile.Path) = Ext1 Then NewFilePath = CurrentFolder & .GetBaseName(oFile.Path) & "." & Ext2 If Not .FileExists(NewFilePath) Then .CreateTextFile(NewFilePath) End If Next End With Wscript.Quit
Sub WsEnd : MsgBox "Не задано расширение!", vbExclamation, Titles : WScript.Quit : End Sub
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Перемещение выделенных файлов\папок на уровень вверх
Code
' MoveOnLevelUp.vbs '===================== Описание ====================== ' Перемещение выделенных файлов\папок на уровень вверх ' Параметры: {файл-список} ' Пример %L ' Автор: Аверин Андрей ' Версия: 1.3 (11.05.10 - 14.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================= Set FSO = CreateObject("Scripting.FileSystemObject") Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1) Do While Not ListFile.AtEndOfStream SelFile = ListFile.ReadLine : rPath = FName(FName(SelFile)) & "\" On Error Resume Next If FSO.FileExists(SelFile) Then FSO.MoveFile SelFile, rPath If FSO.FolderExists(SelFile) Then FSO.MoveFolder Left(SelFile, Len(SelFile) - 1), rPath Loop ListFile.Close : Set ListFile = Nothing : Set FSO = Nothing : WScript.Quit Function FName(pPath) : FName = FSO.GetParentFolderName(pPath) : End Function
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Создание плейлиста всех музыкальных треков в папке и подпапках Используется FunctionsPlus.vbs - файл можете скачать в шапке темы
Code
' MakePlayListsAll.vbs '======================== Описание ===================================== ' Создание плейлиста всех музыкальных треков в папке и подпапках '======================== Параметры ===================================== ' 1-й параметр: Папка\с\треками ' 2-й параметр: Куда\сохранять\список '======================== Примеры ===================================== ' %P%N %t%O.m3u - создать в соседней панели плейлист M3U всех треков в папки под курсором ' Автор: Аверин Андрей ' Версия: 1.0 (24.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '==================== Изменяемые пути =================================== FuncPlus = "%COMMANDER_PATH%\Scripts\Include\FunctionsPlus.vbs" ' файл с дополнительными функциями '======================================================================== With WScript Cnt = .Arguments.Count If Cnt > 1 Then Set FSO = CreateObject("Scripting.FileSystemObject") pMusic = .Arguments(0) : mFile = .Arguments(1) Execute FSO.OpenTextFile(CreateObject("WScript.Shell").ExpandEnvironmentStrings(FuncPlus)).ReadAll ' добавление функций из файла Call CreateMusicList(mFile, pMusic) Set FSO = Nothing : WScript.Quit End If End With
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Создание Font.bar файла - панели Total Commander'a для быстрой установки шрифта файловых панелей Используется InstalFontInWincmd.vbs - Установить Шрифт для Total Commander
Code
; ListFontBar.au3 ; ======================== Описание ===================================== ; Создание Font.bar файла - панели Total Commander'a для быстрой установки шрифта файловых панелей ; ==================== Как работает скрипт ================================ ; 1. Чтение шрифтов из реестра, очистка от мусора, дубликатов, сортировка ; 2. Создание .bar файлов по первым буквам шрифтов (в папке $FontPath) ; 3. Создание Font.bar файла ($FontBarFile) ; ====================== Как использовать ================================ ; 1. запустить скрипт ; 2. перетащить Font.bar на панель Total Commander'a ; 3. сделать кнопку в виде меню (нажать правой кнопкой -> изменить -> галочка в виде меню -> ok) ; ; Автор: Аверин Андрей ; Версия: 1.4 (20.01.2011 - 08.03.2012) ; Mail: Averin-And@yandex.ru ; Site: http://tc-image.3dn.ru ; ======================================================================== Dim $aSSS[1000] = [0] $aSSS[0] = 1 $Text = "" $bText = "" $FontText = "" $FontSym = "" $sCount = "" $n = 0 $FontPath = "%COMMANDER_PATH%\BAR\Font" ; папка для создаваемых вспомогательных .bar файлов $FontBarFile = "%COMMANDER_PATH%\BAR\000_Font.bar" ; основной .bar файл $AutoIt = "%COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3.exe" ; путь к AutoIt3.exe $Script = "%COMMANDER_PATH%\Scripts\CreateBar\ListFontBar.au3" ; путь к этому скрипту $FontInst = "%COMMANDER_PATH%\Scripts\SysScript\InstalFontInWincmd.vbs" ; путь к скрипту, который устанавливает шрифт в Total Commander $IconIcl = "%COMMANDER_PATH%\Wcmicons.dll" ; путь к библиотеке с иконками $NIcon1 = 322 ; номер иконки для вспомогательных .bar файлов $NIcon2 = 1249 ; номер иконки для основного .bar файла $NIcon3 = 80 ; номер иконки обновления $FPath = _TCHExpandEnv($FontPath) DirCreate($FPath) FileDelete($FPath & "\*.bar") FileDelete($FPath & "\*.br2")
; адреса реестра из которых считываются шрифты $aSSS =_ReadRegg("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper",$aSSS[0] , $aSSS) $aSSS =_ReadRegg("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",$aSSS[0], $aSSS) __ArrayQuickSort1D($aSSS, 1, $aSSS[0])
; создание .bar файлов шрифтов в отдельной папке ; шрифты объединяютя в один .bar файл по первой букве $Text = "[Buttonbar]" & @CRLF & "Buttoncount=>>>>" & @CRLF For $kk = 1 to $aSSS[0] + 1 $tFont = _FirstLetterUp($aSSS[$kk]) ; название шрифта $Sym = StringMid($tFont, 1, 1) ; первая буква if $Sym <> $sCount Then if $kk <> 1 Then $BarFile = $FontPath & "\Font_" & $sCount & ".bar" $Text = StringReplace($Text, ">>>>", $n) FileWrite(FileOpen(_TCHExpandEnv($BarFile), 2+8+32), $Text) $FontText = $FontText & $BarFile & ";" ; строка путей создаваемых . bar файлов $FontSym = $FontSym & $sCount & ";" ; строка из первых букв шрифтов $n = 0 $Text = "[Buttonbar]" & @CRLF & "Buttoncount=>>>>" EndIf EndIf $sCount = $Sym $n = $n + 1 $Text = $Text & @CRLF & _ "cmd" & $n & "=" & $FontInst & @CRLF & _ "param"& $n & "=" & Chr(34) & Chr(34) & $tFont & Chr(34) & Chr(34) & @CRLF & _ "menu"& $n & "=Установить шрифт " & Chr(34) & $tFont & Chr(34) & @CRLF & _ "button"& $n & "=" & $IconIcl & "," & $NIcon1 Next
; функция считывает раздел из реестра и заносит имена в массив с определёнными условиями ; нулевая позиция массива является длинной Func _ReadRegg($Adres,$n,$aS) For $i = 1 to 1000 $var = RegEnumVal($Adres, $i) ; Вернуть название значения(Ключ реестра, начиная с N) if @error <> 0 Then ExitLoop if $n = 1 Then $aS[1] = _DelFromLne($var) $n = $n + 1 Endif if StringInStr($var, "&") = 0 Then $var = _Dudlicat($var,$aS) if StringLen($var) > 2 Then $aS[$n] = $var $n = $n + 1 Endif Else $Rez = StringSplit($var, " & ", 1) For $s = 1 To UBound($Rez) - 1 $var = $Rez[$s] $var = _Dudlicat($var,$aS) if StringLen($var) > 2 Then $aS[$n] = $var $n = $n + 1 EndIf Next Endif Next $aS[0] = $n - 1 Return $aS EndFunc
; функция сортирует массив по первым символам (в алфавитном порядке) Func _SortSym(ByRef $aStrings, $ff) For $mm = 0 to $ff - 1 if StringLeft($aStrings[$mm],1) > StringLeft($aStrings[$mm+1],1) Then $Temp = $aStrings[$mm+1] $aStrings[$mm+1] = $aStrings[$mm] $aStrings[$mm] = $Temp $mm = 0 Endif Next Return $aStrings EndFunc
; функция проверяет, есть ли строка уже в масиве, если да, то делает её пустой "" Func _Dudlicat($Line, $dubList) $Line = _DelNum($Line) ; очистка от цифр $Line = _DelFromLne($Line) ; очистка от мусора For $pp = 1 To UBound($dubList) - 1 if $dubList[$pp] = $Line Then $pp = UBound($dubList) $Line = "" Endif Next Return $Line EndFunc
; функция удаления ненужных фраз из строки ; фразы прописываются через ; в $DelText = "(TrueType);Italic;Bold;," Func _DelFromLne($Line) $DelText = "(TrueType);Italic;Bold;,;(All res);(VGA res);(VGA)" $Dell = StringSplit($DelText, ";", 1) ; разрезаем строку, создаём массив For $ii = 1 To UBound($Dell) - 1 $Line = StringReplace($Line, $Dell[$ii] , "") Next $Line = StringStripWS($Line, 3) ; удалить пробелы в начале и вконце строки Return $Line EndFunc
; функция удаления цифр из строки Func _DelNum($Line) $DelText = "1;2;3;4;5;6;7;8;9;0" $Dell = StringSplit($DelText, ";", 1) For $ii = 1 To UBound($Dell) - 1 $Line = StringReplace($Line, $Dell[$ii] , "") Next $Line = StringStripWS($Line, 3) Return $Line EndFunc
; функция преобразования строки "Первый Символ С Большой Буквы" Func _FirstLetterUp($Line) $sLine = "" For $ii = 1 To StringLen($Line) $Sym = StringMid($Line, $ii, 1) if $ii = 1 Then $Sym = StringUpper($Sym) Else if $Sym = " " Then $ii = $ii + 1 $Sym = " " & StringUpper(StringMid($Line, $ii, 1)) Else $Sym = StringLower($Sym) EndIf EndIf $sLine = $sLine & $Sym Next Return $sLine EndFunc
; функция разворачивания переменных окружения Func _TCHExpandEnv($sText) $aResult = StringRegExp($sText, "%(\w+)%", 3) If IsArray($aResult) Then For $i = 0 To UBound($aResult)-1 $sText = StringReplace($sText, "%" & $aResult[$i] & "%", EnvGet($aResult[$i])) Next EndIf Return $sText EndFunc
; быстрая сортирока массива по в алфавитном порядке Func __ArrayQuickSort1D(ByRef $avArray, ByRef $iStart, ByRef $iEnd) If $iEnd <= $iStart Then Return Local $vTmp ; InsertionSort (faster for smaller segments) If ($iEnd - $iStart) < 15 Then Local $vCur For $i = $iStart + 1 To $iEnd $vTmp = $avArray[$i]
If IsNumber($vTmp) Then For $j = $i - 1 To $iStart Step -1 $vCur = $avArray[$j] ; If $vTmp >= $vCur Then ExitLoop If ($vTmp >= $vCur And IsNumber($vCur)) Or (Not IsNumber($vCur) And StringCompare($vTmp, $vCur) >= 0) Then ExitLoop $avArray[$j + 1] = $vCur Next Else For $j = $i - 1 To $iStart Step -1 If (StringCompare($vTmp, $avArray[$j]) >= 0) Then ExitLoop $avArray[$j + 1] = $avArray[$j] Next EndIf
$avArray[$j + 1] = $vTmp Next Return EndIf
; QuickSort Local $L = $iStart, $R = $iEnd, $vPivot = $avArray[Int(($iStart + $iEnd) / 2)], $fNum = IsNumber($vPivot) Do If $fNum Then ; While $avArray[$L] < $vPivot While ($avArray[$L] < $vPivot And IsNumber($avArray[$L])) Or (Not IsNumber($avArray[$L]) And StringCompare($avArray[$L], $vPivot) < 0) $L += 1 WEnd ; While $avArray[$R] > $vPivot While ($avArray[$R] > $vPivot And IsNumber($avArray[$R])) Or (Not IsNumber($avArray[$R]) And StringCompare($avArray[$R], $vPivot) > 0) $R -= 1 WEnd Else While (StringCompare($avArray[$L], $vPivot) < 0) $L += 1 WEnd While (StringCompare($avArray[$R], $vPivot) > 0) $R -= 1 WEnd EndIf
; Swap If $L <= $R Then $vTmp = $avArray[$L] $avArray[$L] = $avArray[$R] $avArray[$R] = $vTmp $L += 1 $R -= 1 EndIf Until $L > $R
Расширения\имена выделенных файлов преобразуются в одну строку и отправляются в буфер обмена Используется NirCmd.exe - файл можете скачать в шапке темы
Code
' FilesInLineInBufer.vbs '======================== Описание ======================================= ' Расширения\имена выделенных файлов преобразуются в одну строку и отправляются в буфер обмена ' разделитель между расширениями\именами, начало и конец строки в параметрах ' (одинаковые расширения\имена в строку не добавляются) '======================== Параметры ======================================= ' 1-й параметр: Cписок файлов ' 2-й параметр: ' "1" - в строку войдут расширения файлов ' "2" - в строку войдут имена файлов ' "3" - в строку войдут "чистые имена" файлов (без расширения) ' 3-й параметр: Разделитель ' 4-й параметр: Начало строки ' 5-й параметр: Конец строки '======================== Примеры ====================================== ' %L "1" ";*." "*." ";" - результат *.vbs;*.txt;*.au3;*.exe;*.cmd; ' %L "2" ";" - результат Read_me.txt;Wincmd.ini;Wcmicons.dll ' %L "3" "|" - результат Read_me|Wincmd|Wcmicons
' Автор: Аверин Андрей ' Версия: 1.2 (20.12.2010 - 23.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '==================== Изменяемые пути ==================================== NirCmd = "%COMMANDER_PATH%\NirCmd.exe" '========================================================================== Cnt = WScript.Arguments.Count If Cnt > 2 Then Dim FSO, WSH Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = WScript.CreateObject("WScript.Shell") Endd = "" : Home = "" : Text = "" Delim = WScript.Arguments(2) If Cnt > 3 Then Home = WScript.Arguments(3) If Cnt > 4 Then Endd = WScript.Arguments(4) End If Set ListFile = FSO.OpenTextFile(GetPath(WScript.Arguments(0)), 1) Do While Not ListFile.AtEndOfStream File = ListFile.ReadLine Select Case WScript.Arguments(1) Case 1 Stroka = FSO.GetExtensionName(File) Case 2 Stroka = FSO.GetBaseName(File) & "." & FSO.GetExtensionName(File) Case 3 Stroka = FSO.GetBaseName(File) End Select If InStr(UCase(Text), UCase(Stroka)) = 0 Then Text = Text & Stroka & Delim Loop
Text = Home & Left(Text, Len(Text) - Len(Delim)) & Endd Tmp = FSO.GetSpecialFolder(2) & "\" & FSO.GetTempName() FSO.CreateTextFile(Tmp, True).Write Text WSH.Run Chr(34) & GetPath(NirCmd) & Chr(34) & " " & "clipboard readfile " & Tmp , 2,True WScript.Sleep 1000 FSO.DeleteFile Tmp Else MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть минимум ТРИ параметра! ""%L"" ""1"" "";""" & vbNewLine &_ "A у Вас прописано " & Cnt & " !!! " , vbOKOnly &_ vbInformation, "Расширения\Имена выделенных файлов одной строкой" End If
Set ListFile = Nothing : Set WSH = Nothing : Set FSO = Nothing: WScript.Quit Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
If $CmdLine[1] = -1 Then ClipPut($CmdLine[2]) Exit Endif
If $CmdLine[0] < 3 Then MsgBox(16 + 262144, "Копирование в буфер изменённые пути выделенных файлов\папок", _ "Не хватает параметров!" & @CRLF & "Должно быть минимум ТРИ 1 %L 0" & @CRLF & _ "Пропишите и повторите попытку!" & @CRLF & "Подробную информацию читайте в комментариях скрипта", 10) Exit Endif
$InsertEdgeTextRight ="" $InsertEdgeTextLeft ="" $InsertTextRight ="" $InsertTextLeft ="" $RightEdgeCentr ="" $LeftEdgeCentr ="" $LineCentr ="" $Line6 =">" $Line7 =">" If $CmdLine[0] > 5 And $CmdLine[6] <> "" Then $Line6 = StringReplace($CmdLine[6], "''", '"') If $CmdLine[0] > 6 And $CmdLine[7] <> "" Then $Line7 = StringReplace($CmdLine[7], "''", '"') ; ======================= Дополнение =========================================== ; Тут задаем замены ; _Add("ЧТО ИСКАТЬ", "ЧЕМ ЗАМЕНЯТЬ") ; и формируем в библиотеки ; ====== Библиотека ПОИСКА И ЗАМЕН №1 (ничего не меняется) ===================== if $CmdLine[1] = 1 Then _Add($Line6,$Line7) Endif ; ==============================================================================
; ======= Библиотека ПОИСКА И ЗАМЕН №3 (из пути вначале удаляются переменные) ======= if $CmdLine[1] = 3 Then _Add(EnvGet("COMMANDER_PATH") & "\", "") _Add(EnvGet("WINDIR") & "\", "") _Add(EnvGet("PROGRAMFILES") & "\", "") _Add($Line6,$Line7) Endif ; =============================================================================
; ====== Библиотека ПОИСКА И ЗАМЕН №5 (ВАША БИБЛИОТЕКА) ======================= if $CmdLine[1] = 5 Then _Add($Line6,$Line7) ; это условие не меняется, а далее можете прописывать любые условия _Add("ЧТО ИСКАТЬ_1", "ЧЕМ ЗАМЕНЯТЬ_1") _Add("ЧТО ИСКАТЬ_2", "ЧЕМ ЗАМЕНЯТЬ_2") _Add("ЧТО ИСКАТЬ_3", "ЧЕМ ЗАМЕНЯТЬ_3") Endif ; =============================================================================
$aList = _TCHLoadFileList($CmdLine[2])
; Проверим, нет ли в наших путях заданных строк из библиотеки поиска и замен For $i = 1 To $aList[0] $sTemp = $aList[$i] For $j = 1 To $aSubst[0][0] $sTemp = StringReplace($sTemp, $aSubst[$j][0], $aSubst[$j][1]) Next if $CmdLine[0] > 2 Then $k = 3 $LineCentr = _StringLine($sTemp) Endif if $CmdLine[0] > 7 Then $k = 8 $LeftEdgeCentr = _StringLine($sTemp) Endif if $CmdLine[0] > 8 Then $k = 9 $RightEdgeCentr = _StringLine($sTemp) Endif
If $CmdLine[0] >3 Then $InsertTextLeft = StringReplace($CmdLine[4], "''", '"') If $CmdLine[0] >4 Then $InsertTextRight = StringReplace($CmdLine[5], "''", '"') If $CmdLine[0] >9 Then $InsertEdgeTextLeft = StringReplace($CmdLine[10], "''", '"') If $CmdLine[0] >10 Then $InsertEdgeTextRight = StringReplace($CmdLine[11], "''", '"') $sResult &= $InsertEdgeTextLeft & $LeftEdgeCentr & $InsertTextLeft & $LineCentr & _ $InsertTextRight & $RightEdgeCentr & $InsertEdgeTextRight & @CRLF Next
; Уберем лишний перенос строки и скопируем в буфер ClipPut(StringTrimRight($sResult, 2))
; Загрузитесь, чтобы выстроить список файлов, полученных с %L или %l TC Func _TCHLoadFileList($sFileName) Local $asList[1] = [0] Local $hfList = FileOpen($sFileName, 0) While 1 $sLine = FileReadLine($hfList) If @error Then Exitloop ReDim $asList[UBound($asList)+1] $asList[UBound($asList)-1] = $sLine Wend FileClose($hfList) $asList[0] = UBound($asList)-1 Return $asList EndFunc
; Функция реверса строки (нужно для некоторых строчных операций) Func _StringReverse($s_String) Local $i_len = StringLen($s_String) If $i_len < 1 Then Return SetError(1, 0, "") Local $t_chars = DllStructCreate("char[" & $i_len + 1 & "]") DllStructSetData($t_chars, 1, $s_String) Local $a_rev = DllCall("msvcrt.dll", "ptr:cdecl", "_strrev", "ptr", DllStructGetPtr($t_chars)) If @error Or $a_rev[0] = 0 Then Return SetError(2, 0, "") Return DllStructGetData($t_chars, 1) EndFunc ;==>_StringReverse
; Функция преобразования полного пути в различные формы Func _StringLine($sTLine) if StringInStr($sTLine,"\",1,-1) = StringLen($sTLine) Then $sTLine = StringReplace(StringLeft($sTLine, StringLen($sTLine) - 1), ".", ">>>") If $CmdLine[$k] = "" Then $sTLine = "" If $CmdLine[$k] = 2 or $CmdLine[$k] = 3 Then $sTLine = _StringReverse(StringLeft(_StringReverse($sTLine), StringInStr(_StringReverse($sTLine), ".", 1, 1) - 1)) If $CmdLine[$k] = 4 or $CmdLine[$k] = 5 Then $sTLine = StringMid($sTLine, StringInStr($sTLine, "\", 1, -1) + 1, StringInStr(_StringReverse($sTLine),"\", 1, 1) - StringInStr(_StringReverse($sTLine), ".", 1, 1) - 1) If $CmdLine[$k] = 6 or $CmdLine[$k] = 7 Then $sTLine = StringRight($sTLine, StringLen($sTLine) - StringInStr($sTLine,"\",1,-1)) If $CmdLine[$k] = 8 or $CmdLine[$k] = 9 Then $sTLine = StringLeft($sTLine, StringLen($sTLine) - StringInStr(_StringReverse($sTLine), ".", 1, 1)) If $CmdLine[$k] = 10 or $CmdLine[$k] = 11 Then $sTLine = StringLeft($sTLine, StringInStr($sTLine, "\", 1, -1) - 1) If $CmdLine[$k] = 12 or $CmdLine[$k] = 13 Then $sTLine = StringLeft(StringLeft($sTLine, StringInStr(StringLeft($sTLine, StringInStr($sTLine, "\", 1, -1) - 1), "\", 1, -1) - 1), StringInStr($sTLine, "\", 1, -1) - 1) If $CmdLine[$k] = 14 or $CmdLine[$k] = 15 Then $sTLine = StringRight($sTLine, StringLen($sTLine) - StringInStr($sTLine, "\", 1, 1)) If $CmdLine[$k] = 16 or $CmdLine[$k] = 17 Then $sTLine = StringRight($sTLine, StringLen(StringRight($sTLine, StringLen($sTLine) - StringInStr($sTLine, "\",1 , 1))) - StringInStr(StringRight($sTLine, StringLen($sTLine) - StringInStr($sTLine, "\", 1, 1)), "\", 1, 1)) If $CmdLine[$k] = 20 or $CmdLine[$k] = 21 Then $sTLine = FileGetShortName($sTLine) If $CmdLine[$k] = 22 or $CmdLine[$k] = 23 Then $sTLine = StringRight(FileGetShortName($sTLine), StringLen(FileGetShortName($sTLine)) - StringInStr(FileGetShortName($sTLine), "\", 1, -1)) If $CmdLine[0] > 1 And Mod($CmdLine[$k],2) > 0 Then $sTLine = '"' & $sTLine & '"' $sTLine = StringReplace($sTLine, ">>>", ".") Return $sTLine EndFunc
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Создание текстового файла с содержимым буфера обмена или именем из буфера обмена Используется TCMC.exe - файл можете скачать в шапке темы
Code
' Buffer_N.vbs '======================== Описание ======================================== ' Создание текстового файла с содержимым буфера обмена или именем из буфера обмена ' (если в папке есть уже фал с таким именем, то создаётся файл ИМЯ_N) '======================== Параметры ======================================== ' 1-й параметр: создаваемый файл ' - если в параметре есть >>>>, то создаётся файл с именем из буфера ' 2-й параметр: минимальное количество цифр номера добавляемое к имени, если таковое уже есть в панели ' - без параметра будет добавляться: имя_1, имя_2, _3, _4 ' - при 2 - имя_01, имя_02, _03, _04 ' - при 3 - имя_001, имя_002 ..... ' 3-й параметр: разделитель ' 4-й параметр: путь\к\программе в которой откроется файл после создания
' "%p%N" файл создаётся в активной панели ' %p\Buffer.vbs 2 файл создаётся в активной панели + номер в виде _0N ' "%p%N" 2 создание файла с именем файла под курсором ... ' "%p%O.txt" 2 создание текстового файла с именем файла под курсором ... ' "%pRead_Me_%N.txt" 2 ' "%p>>>>.txt" создать пустой txt файл с именем из буфера ' "%p>>>>.vbs" 2 создать пустой vbs файл с именем из буфера ' "%p%O.txt" 1 "" ' "%p\WhatIsIt.txt" "1" "" "%%COMMANDER_PATH%%\Programs\Text\Texter2\Texter2.exe" ' основан на коде Batya ' Автор: Аверин Андрей ' Версия: 1.6 (27.10.2010 - 25.02.2012) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '=========================================================================== Option Explicit '====== Изменяемые параметры =============================================== Const IsQuestion = False 'Запрос на создание True '=========================================================================== Dim FSO, WSH, Mess, FileName, Rank, Clip, NewPath, Title, lDlm Title = "Создание текстового файла" FileName = WScript.Arguments(0)
If WScript.Arguments.Count > 1 Then Rank = WScript.Arguments(1) Else Rank = 1 End If
If WScript.Arguments.Count > 2 Then lDlm = WScript.Arguments(2) Else lDlm = "_" End If
Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("WScript.Shell") Clip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") If Mid(FileName,Len(FileName),1) = "\" Then FileName = FileName & "FileBuffer.txt" If Len(Clip) = 0 Or IsNull(Clip) Then Quit
If InStr(FileName, ">>>>") > 0 Then FileName = Replace(FileName, ">>>>", Trim(Clip)) : Clip = "" End If
If IsQuestion Then Mess = "Буфер обмена содержит текст. Создать файл" & vbNewLine &_ """" & NewPath & """" & vbNewLine & "с содержимым буфера обмена?" & vbNewLine If MsgBox(Mess, vbYesNo + vbQuestion, Title) = 7 Then Quit End If On Error Resume Next FSO.OpenTextFile(NewPath, 2, True).Write Clip If Err.Number > 0 Then MsgBox "В буфере содержится некорректный текст" & vbNewLine &_ "для создания имени файла", vbOKOnly & vbInformation, Title Quit End If If WScript.Arguments.Count > 3 Then WSH.Exec(WScript.Arguments(3) & Chr(32) & NewPath) WSH.Exec("%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe 100 CM540") Quit
Sub Quit : Set WSH = Nothing : Set FSO = Nothing : WScript.Quit : End Sub
Function NextName(pFilePath) Dim lPath, lName, lExt, li, lNum, lNewPath lExt = FSO.GetExtensionName(pFilePath) If lExt = "" Then pFilePath = pFilePath & ".txt"
lPath = FSO.GetParentFolderName(pFilePath) lName = FSO.GetBaseName(pFilePath) If lName = "" Then pFilePath = lPath & lName & lDlm & "\1." & lExt If Len(lPath) > 0 Then lPath = lPath & "\" If Not FSO.FileExists(pFilePath) Then NextName = pFilePath Exit Function End If Do li = li + 1 If li < 10^Rank Then lNum = Right(String(Rank, "0") & li, Rank) Else lNum = li End If lNewPath = lPath & lName & lDlm & lNum & "." & lExt Loop While FSO.FileExists(lNewPath) NextName = lNewPath End Function
Читайте:Справочные материалы по работе c TC + Онлайн справка TC
satuk, если я правильно понял ' "%p%N" 2 создание файла с именем файла под курсором ' "%p%O.txt" 2 создание текстового файла с именем файла под курсором можно попробовать ещё такие варианты ' "%p%N.txt" 2 "%pRead_Me_%N.txt" 2 "%pRead_Me_%O.txt" 2 Читайте:Справочные материалы по работе c TC + Онлайн справка TC