Скрипты - уникальный инструмент для достижения различных целей в работе с файлами и не только, особенно в файловом менеджере, даже если вы ничего раньше об этом ничего не слышали и не знали, то путём простых движений вы можете оптимизировать свои действия Тема тестирования скриптов создана для увеличения функциональности 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
satuk, если я правильно понял ' "%p%N" 2 создание файла с именем файла под курсором ' "%p%O.txt" 2 создание текстового файла с именем файла под курсором можно попробовать ещё такие варианты ' "%p%N.txt" 2 "%pRead_Me_%N.txt" 2 "%pRead_Me_%O.txt" 2
Копирование выделенных файлов\папок в ту же панель с добавлением счётчика
Code
' CopyAllInPanelN.vbs '======================== Описание ===================================== ' Копирование выделенных файлов\папок в ту же панель с добавлением счётчика '======================= Параметры ===================================== ' 1-й параметр: файл-список ' 2-й параметр: минимальное количество цифр номера добавляемое к имени, если таковое уже есть в панели ' - без параметра будет добавляться: имя_1, имя_2, _3, _4 ' - при 2 - имя_01, имя_02, _03, _04 ' - при 3 - имя_001, имя_002 ..... '======================== Примеры ===================================== ' %L ' %L 2
' Автор: Аверин Андрей ' Версия: 1.1 (2010 - 28.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '====================================================================== Option Explicit Dim ListFile, SelFile, Name, Ext, Path, FPath, Rank, Delim, n, Num
If WScript.Arguments.Count = 0 Then MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Копирование" WScript.Quit End If
If WScript.Arguments.Count > 1 Then Rank = WScript.Arguments(1) Else Rank = 1 End If Delim = "_" ' если не нужен замените на Delim = ""
With CreateObject("Scripting.FileSystemObject") Set ListFile = .OpenTextFile(WScript.Arguments(0), 1) Do While Not ListFile.AtEndOfStream SelFile = ListFile.ReadLine Path = .GetParentFolderName(SelFile) & "\" Name = .GetBaseName(SelFile) Ext = .GetExtensionName(SelFile) FPath = Path
Do n = n + 1 If n < 10^Rank Then Num = Right(String(Rank, "0") & n, Rank) Else Num = n End If FPath = Path & Name & Delim & Num & "." & Ext Loop While (.FileExists(FPath) Or .FolderExists(FPath))
If .FileExists(SelFile) Then .CopyFile SelFile, FPath If .FolderExists(SelFile) Then .CopyFolder Left(SelFile, Len(SelFile) - 1), FPath Loop End With
ListFile.Close : Set ListFile = Nothing WScript.Quit
Быстрое добавление файла в ассоциации ТС + вызов окна ассоциаций TC + ENTER (обновление) Используется TCMC.exe - файл можете скачать в шапке темы
Code
' ReplaceTextAss.vbs '======================== Описание ===================================== ' Быстрое добавление файла в ассоциации ТС + вызов окна ассоциаций TC + ENTER (обновление) ' Заменяет FilterN= на FilterN=Имя или расширение в файле ассоциаций '======================= Параметры ===================================== ' 1-й параметр: файл, где прописаны ассоциации ' 2-й параметр: текст для поиска (FilterN=) ' 3-й параметр: текст для замены (FilterN=;%N) '======================== Примеры ===================================== ' "%%COMMANDER_PATH%%\WinAssociations.ini" "Filter5=" "Filter5=;*.%E" - Добавление РАСШИРЕНИЯ под курсором в Filter_5 ' "%%COMMANDER_PATH%%\Wincmd.ini" "Filter5=" "Filter5=;%N" - Добавление ИМЕНИ под курсором в Filter_5
' Автор: Аверин Андрей ' Версия: 1.1 (2010 - 28.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================================== Option Explicit Dim F, Str1, Str2, Text
With WScript If .Arguments.Count < 3 Then MsgBox "Не хватает параметров!!!", vbOKOnly & vbInformation,_ "Добавление файла в ассоциации" : .Quit End If F = .Arguments(0) : Str1 = .Arguments(1) : Str2 = .Arguments(2) End With
With CreateObject("Scripting.FileSystemObject") F = .GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F)) Text = .OpenTextFile(F, 1).ReadAll Text = Replace(Text, Str1, Str2, 1, -1, 1) .OpenTextFile(F, 2).Write Text End With
With CreateObject("WScript.Shell") WScript.Sleep 100 .Exec("%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe 150 CM519") WScript.Sleep 100 : .SendKeys "{Enter}" : WScript.Quit End With
Копирование любого количества файлов и папок в любое количество папок
Code
' BigFilesCopyInBigFolders.vbs '======================== Описание ===================================== ' Копирование любого количества файлов и папок в любое количество папок. ' В параметры %L '==================== Как работает скрипт ================================ ' 1. Выделяем объекты (файлы, папки) "что копировать", жмем кнопку. ' 2. Далее выделяем папки "куда копировать", жмем кнопку. ' Если при выделении папок "куда копировать" ничего не выделено, ' скрипт прекращает работу. Или если при выделении папок ' "куда копировать" выделены файлы, то они игнорируются. ' Автор: jehaz & Аверин Андрей ' Версия: 1.1 (16.08.2007 - 28.10.2011) ' Site: http://tc-image.3dn.ru '======================================================================== Option Explicit Dim Tempdir, PathTempFile, FolderList, FileList, MsgFoldersStr, MsgFileText, MsgFolders Dim Argument, MsgFoldersText, StrFolder, StrFiles, CopyFileName, MsgFileStr Dim Lenstr, LastChar, Result, TextStreamFL, TextStream
With CreateObject("Scripting.FileSystemObject") If WScript.Arguments.Count>0 Then Argument = WScript.Arguments(0) Tempdir = CreateObject("WScript.Shell").Environment("Process")("TEMP") PathTempFile = Tempdir & "\FileListTemp.txt" If .FileExists(PathTempFile) then Set FolderList = .GetFile(Argument) : Set FileList = .GetFile(PathTempFile) Set TextStream = FolderList.OpenAsTextStream(1) MsgFoldersStr = vbNullString : MsgFoldersText = vbNullString While Not TextStream.AtEndOfStream MsgFoldersStr = TextStream.ReadLine() If .FolderExists(MsgFoldersStr) Then MsgFoldersText = MsgFoldersText & MsgFoldersStr & vbCrLf Wend TextStream.Close Set MsgFileStr = FileList.OpenAsTextStream(1) MsgFileText = MsgFileStr.ReadAll() If MsgFoldersText <> "" then Result = MsgBox("Будем копировать?" & vbCrLf & "объекты:"_ & vbCrLf & MsgFileText & vbCrLf & "в папки:" & vbCrLf & _ MsgFoldersText, vbYesNo+vbQuestion, "Внимание!") Else MsgBox "Не выделены папки для для копирования!!! " & vbCrLf & _ "Временные файлы удалены! " & vbCrLf & "Работа скрипта завершена! "_ , vbExclamation,"Отмена!!! " End If MsgFileStr.Close If Result = 6 Then Set TextStream = FolderList.OpenAsTextStream(1) : StrFolder = vbNullString While Not TextStream.AtEndOfStream StrFolder = TextStream.ReadLine() Set TextStreamFL = FileList.OpenAsTextStream(1) : StrFiles = vbNullString While Not TextStreamFL.AtEndOfStream StrFiles = TextStreamFL.ReadLine() If .FolderExists(StrFolder) Then CreateObject("Shell.Application").NameSpace(StrFolder).CopyHere StrFiles, 20 Wend TextStreamFL.Close Wend TextStream.Close MsgBox "Копирование удачно выполнено!!! ",vbExclamation,"Скопировано! " End If .DeleteFile PathTempFile, 0 Else .GetFile(Argument).Copy Tempdir & "\FileListTemp.txt" MsgBox " Создан список выделенных файлов\папок для копирования!" & vbNewLine &_ "Теперь перейдите в другую панель и выделите папки," & vbNewLine &_ "в которые необходимо скопировать выделенное и ещё раз нажмите кнопку ", _ vbExclamation ,"Копирование выделенного в группу выделенных папок " End If End If End With Set TextStreamFL = Nothing : Set MsgFileStr = Nothing : Set TextStream = Nothing Set FolderList = Nothing : Set FileList = Nothing : WScript.Quit
Копирование выделенных файлов или из файл списка в создаваемую папку
Code
' CopySelectFilesInFolder.vbs '======================== Описание ===================================== ' Копирование выделенных файлов или из файл списка в создаваемую папку, ' если такая папка существует, ей присваивается счётчик _0N ' если такой файл существует, при копировании ему так же присваивается счётчик _0N '======================== Параметры ===================================== ' 1-й параметр: список файлов ' 2-й параметр: путь\копирования\ ' 3-й параметр: "Имя создаваемой папки" (если параметр отсутствует, то имя="Каталог") '======================== Примеры ====================================== ' %L %p - копия выделенных файлов в папку "Каталог" в текущей панели ' %L %p "%O" - копия выделенных файлов в папку имя под курсором в текущей панели ' %L %t - копия выделенных файлов в папку "Каталог" в соседней панели ' %L %t "%O" - копия выделенных файлов в папку имя под курсором в соседней панели ' "%%COMMANDER_PATH%%\Files\Lists\MarkerList.txt" %t "Папка" ' %P%N %t "Папка" - копия всех файлов из файл списка под курсором в соседнюю панель в "Папку" ' (%P%N %t - очень помогает копирование из M3U листа музыкальных композиций...)
' Автор: Аверин Андрей ' Версия: 1.3 (28.09.2010 - 28.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '====================================================================== With WScript Cnt = .Arguments.Count If Cnt < 2 Then MsgBox "Не хватает параметров! Должно быть минимум Два параметра" & vbNewLine &_ "пример: %L %p", vbOKOnly & vbInformation, "Копия выделенных файлов в создаваемую папку" .Quit End If FF = CreateObject("WScript.Shell").ExpandEnvironmentStrings(.Arguments(0)) MsgBox "Переменная FF =" & vbNewLine & "<" & FF & ">" Path = CreateObject("Shell.Application").NameSpace(.Arguments(1)).Self.Path & "\" MsgBox "Переменная Path =" & vbNewLine & "<" & Path & ">" If Cnt > 2 Then Name = .Arguments(2) MsgBox "Переменная Name =" & vbNewLine & "<" & Name & ">" End With
If Len(Name) = 0 Then Name = "Каталог" FPath = Path & Name MsgBox "Переменная FPath =" & vbNewLine & "<" & FPath & ">"
With CreateObject("Scripting.FileSystemObject") Do While .FolderExists(FPath) i = i + 1 : FPath = Path & Name & Numer(i) Loop .CreateFolder(FPath) Set ListFile = .OpenTextFile(FF, 1) Do While Not ListFile.AtEndOfStream SelFile = ListFile.ReadLine If .FileExists(SelFile) Then Path = .GetParentFolderName(SelFile) FName = .GetFileName(SelFile) Do While .FileExists(FPath & "\" & FName) i = i + 1 : FName = Name & Numer(i) Loop .CopyFile SelFile, FPath & "\" & FName End if Loop End With ListFile.Close : Set ListFile = Nothing : WScript.Quit Function Numer(ii) : Numer = "_" & (ii Mod 100)\10 & (ii Mod 10) : End Function
Копирование выделенных файлов\папок по заданному количеству в отдельные (создаваемые) папки
Code
' CopyGroupFileInFolders.vbs '======================== Описание ===================================== ' Копирование выделенных файлов\папок по заданному количеству в отдельные (создаваемые) папки '======================= Параметры ===================================== ' 1-й параметр: файл-список ' 2-й параметр: папка\куда\копируются\файлы ' 3-й параметр: количество копируемых файлов в каждую папку ' если параметр отсутствует или параметр = 0 , то выводится диалог ввода '======================== Примеры ===================================== ' %L %t 50 ' %L %p 50 ' %L %t
' Автор: Batya & Аверин Андрей ' Версия: 1.1 (07.09.2010 - 29.10.2011) ' Site: http://tc-image.3dn.ru '======================================================================== Option Explicit '================= Изменяемые параметры ================================= Const Rank = 3 'Минимальное количество цифр в создаваемых папках '======================================================================== Dim FileList, List, F, Folder, Count, i, n, Path, Cnt, Mess Mess = "Копия выделенных файлов по заданному к-ву" With WScript Cnt = .Arguments.Count If Cnt < 2 Then MsgBox "Не хватает параметров! Должно быть минимум Два параметра" & vbNewLine &_ "пример: %L %p", vbOKOnly & vbInformation, Mess .Quit End If FileList = .Arguments(0) : Folder = .Arguments(1) If Cnt > 2 Then Count = CInt(.Arguments(2)) Else InputNumer End If If Count <= 0 Then InputNumer End With
With CreateObject("Scripting.FileSystemObject") List = Split(.OpenTextFile(FileList).ReadAll, vbNewLine) If Right(Folder, 1) <> "\" Then Folder = Folder & "\" n = 1 : i = Count
For Each F In List If F <> "" Then If i >= Count Then If Len(CStr(n)) < Rank Then Path = Folder & Right(String(Rank, "0") & CStr(n), Rank) & "\" Else Path = Folder & CStr(n) & "\" End If If Not .FolderExists(Path) Then .CreateFolder(Path) i = 1 : n = n + 1 Else i = i + 1 End If If .FileExists(F) Then .CopyFile F, Path If .FolderExists(F) Then If Right(F, 1) = "\" Then F = Left(F, Len(F) - 1) .CopyFolder F, Path End If End If Next End With Wscript.Quit
Sub InputNumer Count = InputBox("Введите ЧИСЛО по СКОЛЬКО" & vbNewLine &_ "файлов копировать в отдельные папки", Mess, 3) If Len(Count) = 0 Then WScript.Quit Count = CInt(Count) If Count = 0 Then Count = 3 End Sub
Копирование выделенных файлов каждый в отдельную именную папку
Code
' CopyGroupFileInFolders.vbs '======================== Описание ===================================== ' Копирование выделенных файлов\папок по заданному количеству в отдельные (создаваемые) папки '======================= Параметры ===================================== ' 1-й параметр: файл-список ' 2-й параметр: папка\куда\копируются\файлы ' 3-й параметр: количество копируемых файлов в каждую папку ' если параметр отсутствует или параметр = 0 , то выводится диалог ввода '======================== Примеры ===================================== ' %L %t 50 ' %L %p 50 ' %L %t
' Автор: Batya & Аверин Андрей ' Версия: 1.1 (07.09.2010 - 29.10.2011) ' Site: http://tc-image.3dn.ru '======================================================================== Option Explicit '================= Изменяемые параметры ================================= Const Rank = 3 'Минимальное количество цифр в создаваемых папках '======================================================================== Dim FileList, List, F, Folder, Count, i, n, Path, Cnt, Mess Mess = "Копия выделенных файлов по заданному к-ву" With WScript Cnt = .Arguments.Count If Cnt < 2 Then MsgBox "Не хватает параметров! Должно быть минимум Два параметра" & vbNewLine &_ "пример: %L %p", vbOKOnly & vbInformation, Mess .Quit End If FileList = .Arguments(0) : Folder = .Arguments(1) If Cnt > 2 Then Count = CInt(.Arguments(2)) Else InputNumer End If If Count <= 0 Then InputNumer End With
With CreateObject("Scripting.FileSystemObject") List = Split(.OpenTextFile(FileList).ReadAll, vbNewLine) If Right(Folder, 1) <> "\" Then Folder = Folder & "\" n = 1 : i = Count
For Each F In List If F <> "" Then If i >= Count Then If Len(CStr(n)) < Rank Then Path = Folder & Right(String(Rank, "0") & CStr(n), Rank) & "\" Else Path = Folder & CStr(n) & "\" End If If Not .FolderExists(Path) Then .CreateFolder(Path) i = 1 : n = n + 1 Else i = i + 1 End If If .FileExists(F) Then .CopyFile F, Path If .FolderExists(F) Then If Right(F, 1) = "\" Then F = Left(F, Len(F) - 1) .CopyFolder F, Path End If End If Next End With Wscript.Quit
Sub InputNumer Count = InputBox("Введите ЧИСЛО по СКОЛЬКО" & vbNewLine &_ "файлов копировать в отдельные папки", Mess, 3) If Len(Count) = 0 Then WScript.Quit Count = CInt(Count) If Count = 0 Then Count = 3 End Sub
Создание для выделенных файлов "пустых" файлов путём копирования их из папки с шаблонами Template, с добавлением счётчика _0N, если таковые уже имеются
Code
' CopyTemplateExt.vbs '======================== Описание ===================================== ' Создание для выделенных файлов "пустых" файлов путём копирования их ' из папки с шаблонами Template, с добавлением счётчика _0N, если таковые уже имеются ' + их открытие в программе ассоциированной в ТС ' + создание одиночного пустого файла ' Предварительно необходимо создать в папке Template файлы Template.txt , Template.doc ... ' Пути в скрипте измените под себя, если это необходимо '======================== Параметры ===================================== ' 1-й параметр: файл список - Первый параметр обязателен!!! ' 2-й параметр: путь\куда\копировать\файл ' 3-й параметр: расширение копируемого файла ' 4-й параметр: новое имя файла ' 5-й параметр: любой(означает, что файл надо открыть в программе ассоциированной в ТС '======================== Примеры ====================================== ' %L - создание файлов в текущей панели Template.(расширение под курсором) ' %L %t - создание файлов в соседней панели Template.(расширение подкурором) ' %L "C:\" "doc" - cоздание doc файлов с именем Template.doc ' %L "%%WINDIR%%\" "xlsx" "%O" - создание xlsx файлов с именем файла под курсорм ' %L %t "txt" "Read_Me" - создание файлов Read_Me.txt (без открытия) ' %L %t "txt" "Read_Me" 1 - создание файлов Read_Me.txt + открытие в ассоциированний программе ' %L %p "%E" "" 1 - открывает вновь созданные файл в текущей панели с именем и расширением файла под курсором ' ( выше описанные Параметры не работают в пустой папке\панели из-за %L ) ' "" "%P" "txt" "%O" 1 - создание одного файла, но работает и в пустой панели '======================= Дополнение ==================================== ' Кроме выше описанных примеров можно создавать "пустые" файлы из файл списка ' К примеру: Создайте файл Spisok.txt в папке Тотала и пропишите в нём нужный вам список ИМЁН: ' File1.txt ' File2.doc ' File3.vbs ' ... ' В параметрах: %%COMMANDER_PATH%%\Spisok.txt "%P" "FileList" ' т.е. если в 3-й параметр вписать вместо расширения "FileList" то будут создаваться именные пустые файлы '========================================================================== ' ' Автор: Аверин Андрей ' Версия: 1.8 (28.10.2010 - 14.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================== Изменяемые пути ===================================== TemplatePath = "%COMMANDER_PATH%\Files\TempLate\" ' папка хранения файлов-шаблонов Temlate.xxx FileAss = "%COMMANDER_PATH%\WinAssociations.ini" ' файл ассоциаций ТС, секция вынесена из Wincmd.ini '=========================================================================== Cnt = WScript.Arguments.Count If Cnt = 0 Then MsgBox "Не заданы параметры!" & vbNewLine &_ "Должен быть как минимум один параметр %L",_ vbOKOnly + vbInformation, "Создание ''пустых'' файлов" WScript.Quit End If
Dim WSH, FSO, FPath Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = WScript.CreateObject("WScript.Shell") TemplatePath = GetPath(TemplatePath) : FileAss = GetPath(FileAss)
If WScript.Arguments(0) = "" Then PP ="" : FCreateFile If Cnt > 4 Then RunFileAssociationsTC WsEnd End If
Set ListFile = FSO.OpenTextFile(GetPath(WScript.Arguments(0)), 1) Do While Not ListFile.AtEndOfStream PP = ListFile.ReadLine : FCreateFile If Cnt > 4 Then RunFileAssociationsTC Loop
RereadSource ListFile.Close : Set ListFile = Nothing : WsEnd
Function FCreateFile If Cnt > 1 Then Path = WScript.Arguments(1) Else Path = FSO.GetParentFolderName(PP) End If
If Path = "" Then Path = FSO.GetParentFolderName(PP) Path = GetPath(Path) If Right(Path, 1) <> "\" Then Path = Path & "\" If Cnt > 2 Then Ext = WScript.Arguments(2) If Ext = "" Then Ext = FSO.GetExtensionName(PP) If Ext = "" Then Ext = "txt"
If Cnt > 3 Then Name = WScript.Arguments(3) Else Name = "Template" If Name = "" Then Name = FSO.GetBaseName(PP) If Name = "" Then Name = "Template"
If Cnt > 2 Then If UCase(WScript.Arguments(2)) = UCase("FileList") Then Ext = FSO.GetExtensionName(PP) : Name = FSO.GetBaseName(PP) End If End If
If Not FSO.FileExists(ImPath) Then MsgBox "Файл ''Template." & Ext & "'' в папке " & vbNewLine &_ TemplatePath & " не обнаружен! " & vbNewLine &_ "Создайте шаблон файла - Template.xxx - файл с нужным расширением в данной папке!"&_ " И будет Вам счастье!" , vbOKOnly & vbInformation, "Создание ''пустых'' файлов" WsEnd End If
i = 0 Do While FSO.FileExists(FPath) i = i + 1 : FPath = Path & Name & "_" & (i Mod 100)\10 & (i Mod 10) & "." & Ext Loop
On Error Resume Next FSO.CopyFile ImPath, FPath : RereadSource End Function
' Процедура запуска файла ассоциированной программой в Total Commander Sub RunFileAssociationsTC() Param = FPath : Ext = UCase("*." & FSO.GetExtensionName(Param) & ";") ListAss = Split(FSO.OpenTextFile(FileAss).ReadAll, vbNewLine) For i = 0 To Ubound(ListAss) If Len(ListAss(i)) > 0 Then If InStr(1,ListAss(i),"|") > 1 Then Stroka = UCase(Left(ListAss(i), InStr(1,ListAss(i),"|"))) Else Stroka = UCase(ListAss(i)) End If If InStr(1,Stroka,Ext) > 1 Then ' Ищем номер строки и затем ассоциированную программу la = ListAss(i + 1) : Program = Mid(la, InStr(1, la, Chr(34)) + 2 , Len(la) - InStr(1, la, Chr(34)) - 8) : Exit For End If End If Next WSH.Run Chr(34) & GetPath(Program) & Chr(34) & Chr(32) & Chr(34) & GetPath(Param) & Chr(34) ,Okno , FileRun End Sub
Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function Sub RereadSource : WSH.Exec("%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe 100 CM540") : End Sub Sub WsEnd : Set WSH = Nothing : Set FSO = Nothing : WScript.Quit : End Sub
Копирование выделенных файлов\папок в текущий каталог с добавлением текущей даты:
Code
' CopyDubleDate.vbs '======================== Описание ===================================== ' Копирование выделенных файлов\папок в текущий каталог с добавлением текущей даты ' Параметр %L ' Автор: Аверин Андрей ' Версия: 1.1 (2010 - 29.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================================== Option Explicit Dim List, F, Cnt If WScript.Arguments.Count = 0 Then MsgBox "Не заданы параметры!" & vbNewLine &_ "Должен быть минимум ОДИН параметр %L",_ vbOKOnly + vbInformation, "Копирование с добавлением даты" WScript.Quit End If With CreateObject("Scripting.FileSystemObject") List = .OpenTextFile(WScript.Arguments(0), 1, False).ReadAll For Each F In Split(List, vbNewLine) If .FileExists(F) Then .CopyFile F, .GetFile(F).ParentFolder.Path & "\" &_ .GetBaseName(F) & " " & DateTime & "." & .GetExtensionName(F) End If If .FolderExists(F) Then .CopyFolder Left(F, Len(F) - 1), Left(F, Len(F) - 1) & Chr(32) & DateTime End If Next End With WScript.Quit
Function DateTime Dim YY, MM, DD, H, M, S YY = Year(date) : MM = Month(date) : DD = Day(date) H = Hour(time) : M = Minute(time) : S = Second(time) DateTime = "[" & Right("0" & YY, 2) & "." & Right("0" & MM, 2) & "." & Right("0" & DD, 2) &_ " - " & Right("0" & H, 2) & "." & Right("0" & M, 2) & "." & Right("0" & S, 2) & "]" End Function
Создает копию выделенных файлов\папок, добавляя к имени порядковый номер в скобках (идентично TC)
Code
' CopyFilesSkobaN.vbs '================================================================ ' Создает копию выделенных файлов\папок, добавляя к имени порядковый номер ' в скобках (идентично TC). Если в имени уже присутствует порядковый номер в скобках, ' то увеличивает нумерацию до появления незанятого номера. ' Параметры %L
If WScript.Arguments.Count < 1 Then MsgBox "Неправильно указано количество параметров!" & vbNewLine &_ "Должен быть минимум ОДИН параметр %L", _ vbOKOnly & vbInformation, "Копирование файлов\папок с добавлением (N)" WScript.Quit End If
Set FSO = CreateObject("Scripting.FilesystemObject") Set FileList = FSO.GetFile(WScript.Arguments(0)) Set TextStream = FileList.OpenAsTextStream(1) FileStr = vbNullString
While Not TextStream.AtEndOfStream FileStr = TextStream.ReadLine() Counter = 1 : FileName = FSO.GetBaseName(FileStr) : Count = Len(FileName)
Do If Mid(FileName, Len(FileName),1) = ")" Then Do While Count <> 0 If Mid(FileName, Count,1) = "(" Then OpenSkoba = Count BetSkoba = Mid(FileName, OpenSkoba + 1, Len(FileName) - Count-1) BefSkoba = Mid(FileName, 1, OpenSkoba - 1) : Count = 0 Else Count = Count - 1 End If Loop
On Error Resume Next BetSkobaInt = FormatNumber(BetSkoba, 0) If Err.Number = 0 Then If BetSkoba - BetSkobaInt = 0 Then FileName = BefSkoba : Counter = Counter + BetSkobaInt - 1 End If End If Count = 0 : Counter = Counter + 1 : Ext = FSO.GetExtensionName(FileStr) FullName = FSO.GetParentFolderName(FileStr) & "\" & FileName & "(" & Counter & ")" If Ext <> "" Then FullName = FullName & "." & Ext Loop until Not (FSO.FileExists(FullName) Or FSO.FolderExists(FullName))
If FSO.FileExists(FileStr) Then FSO.CopyFile FileStr, FullName If FSO.FolderExists(FileStr) Then FSO.CopyFolder Left(FileStr, Len(FileStr) - 1), FullName Wend
Set TextStream = Nothing : Set FileList = Nothing : Set FSO = Nothing : WScript.Quit
Установить Шрифт для Total Commander Используется FunctionsINIRWS.vbs и TCMC.exe - файлы можете скачать в шапке темы
Code
' InstalFontInWincmd.vbs '====================================================================== ' Установить Шрифт для Total Commander ' можно использовать со скриптом ListFontBar.au3 '======================== Параметры =================================== ' В параметрах вызова из TC должно быть прописанo {имя шрифта} '======================== Примеры =================================== ' "Courier New" ' ' Автор: Аверин Андрей ' Версия: 1.2 (07.01.2011 - 08.03.2012) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '================= Изменяемые параметры ================================ TCINI = "%COMMANDER_PATH%\Wincmd.ini" INI = "%COMMANDER_PATH%\Scripts\Include\FunctionsINIRWS.vbs" TCMC = "%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe" '======================================================================== If WScript.Arguments.Count < 1 Then MsgBox "Не хватает параметров!" & vbNewLine & "Должно быть ОДИН параметр! Имя Шрифта", vbOKOnly &_ vbCritical, "Установка шрифта в Total Commander" : Wscript.Quit End If
' SpisokHtml.vbs '======================== Описание ============= ' Создание списка файлов в html формате '======================= Параметры ============= ' 1-й параметр: список файлов ' 2-й параметр: путь сохранения ' 3-й параметр: текст до ' 4-й параметр: текст после '======================== Примеры ============= ' %UL %t - Создать HTML список ИМЁН выделенного.. ' %UF %t - Создать HTML список ПУТЕЙ выделенного... ' Автор: Аверин Андрей ' Версия: 1.1 (2010 - 23.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '================================================ With WScript Cnt = .Arguments.Count If Cnt < 2 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть прописано минимум 2 параметра %UL %t",_ vbOKOnly & vbInformation, "Создание списка файлов в html формате" .Quit End If Set ts = CreateObject("Scripting.FileSystemObject").OpenTextFile(.Arguments(0), 1) Path = .Arguments(1) If Cnt > 2 Then Text1 = .Arguments(2) If Cnt > 3 Then Text2 = .Arguments(3) End If End With Line = "<head>" & vbNewLine &_ "<meta http-equiv='Content-Type'content='text/html; charset=utf-8' />" & vbNewLine &_ "<style type='text/css'>" & vbNewLine &_ "body {background-color: #E4F3FF;font-family: sans-serif, Helvetica, Arial;font-size:px;}" & vbNewLine &_ "h1 {color: #2D58AE;font-size: 25px;}" & vbNewLine &_ "hr {color: #555555;}" & vbNewLine &_ "</style>" & vbNewLine &_ "</head>" & vbNewLine &_ "<body>" & vbNewLine &_ "<h1>List</h1>" & vbNewLine &_ "<hr />" & vbNewLine &_ "<ol>" & vbNewLine Do Until ts.AtEndOfStream Line = Line & " <li>" & Text1 & ts.ReadLine & Text2 & "</li>" & vbNewLine Loop
Создание списка файлов с гиперссылками в html формате
Code
' SpisokHtmlLink.vbs '======================== Описание ===================================== ' Создание списка файлов с гиперссылками в html формате '======================= Параметры ===================================== ' 1-й параметр: список файлов ' 2-й параметр: путь сохранения ' 3-й параметр: текст до ' 4-й параметр: текст после '======================== Примеры ===================================== ' %UL %t - сохранение в соcедней панели списка с гиперссылками в html ' Автор: Аверин Андрей ' Версия: 1.1 (18.10.2011 - 23.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================================== With WScript If .Arguments.Count < 2 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть прописано минимум 2 параметра %UL %t",_ vbOKOnly & vbInformation, "Создание списка файлов в html формате" .Quit End If List = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(.Arguments(0)).ReadAll, vbNewLine) Path = .Arguments(1) If Cnt > 2 Then Text1 = .Arguments(2) If Cnt > 3 Then Text2 = .Arguments(3) End If End With Stroki = "<head>" & vbNewLine &_ "<meta http-equiv='Content-Type'content='text/html; charset=utf-8' />" & vbNewLine &_ "<style type='text/css'>" & vbNewLine &_ "body {background-color: #E4F3FF;font-family: sans-serif, Helvetica, Arial;font-size:px;}" & vbNewLine &_ "h1 {color: #2D58AE;font-size: 25px;}" & vbNewLine &_ "hr {color: #555555;}" & vbNewLine &_ "</style>" & vbNewLine &_ "</head>" & vbNewLine &_ "<body>" & vbNewLine &_ "<h1>List Link</h1>" & vbNewLine &_ "<hr />" & vbNewLine &_ "<ol>" With CreateObject("Scripting.FileSystemObject") For i = 0 To Ubound(List) If Len(List(i)) > 0 Then Stroki = Stroki & vbNewLine & " <li><a href='" & List(i) & "'>" & text1 & .GetFileName(List(i)) & text2 & "</a><BR></li>" Next
Создание в соседней панели пустой структуры выделенных папок и файлов
Code
' StructuraNul.vbs '======================== Описание ============================ ' Создание в соседней панели пустой структуры выделенных папок и файлов '======================= Параметры ============================ ' 1-й параметр: список файлов\папок ' 2-й параметр: куда\сохранять\пустую\структуру ' 3-й параметр: любой, означает, что создаваться будет только структура папок '======================== Примеры ============================ ' %L %t - пустая структура папок и файлов ' %L %t 1 - пустая структура папок
Set FSO = CreateObject("Scripting.FileSystemObject") With WScript Cnt = .Arguments.Count If Cnt < 2 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть прописано минимум 2 параметра %L %t",_ vbOKOnly & vbInformation, "Создание пустой структуры файлов" .Quit End If Set OTF = FSO.OpenTextFile(.Arguments(0), 1) Target = CreateObject("Shell.Application").NameSpace(.Arguments(1)).Self.Path & "\" End With Do While Not OTF.AtEndOfStream Selected = OTF.ReadLine If FSO.FileExists(Selected) Then FSO.CreateTextFile(Target & FSO.GetFileName(Selected)) If FSO.FolderExists(Selected) Then NewTar = Target & FSO.GetFolder(Selected).Name If Not FSO.FolderExists(NewTar) Then FSO.CreateFolder(NewTar) FolderProcess FSO.GetFolder(Selected), NewTar & "\" End If Loop
Set OTF = Nothing : Set FSO = Nothing : WScript.Quit
Function FolderProcess(Fold, Tar) Dim sf, f, NewF For Each sf in Fold.SubFolders NewF = Tar & sf.Name If Not FSO.FolderExists(NewF) Then FSO.CreateFolder(NewF) FolderProcess sf, NewF & "\" Next If Cnt < 3 Then For Each f in Fold.Files FSO.CreateTextFile(Tar & FSO.GetFile(f).Name) Next End If End Function
' GroupDescripts.vbs '======================== Описание ===================================== ' Массовое Добавление\Удаление\Замена комментария (descript.ion), переданного параметрами '======================= Параметры ===================================== ' 1-й параметр: %p - обязательный ' 2-й параметр: список файлов- обязательный ' 3-й параметр: Сам Комментарий ' 4-й параметр: Режим работы с комментарием ' 1 - Добавление (по умолчанию) ' 2 - Удаление ' 3 - Инверсия ' 5-й параметр: Режим места комментария ' 1 - Начало (по умолчанию) ' 2 - Конец ' 3 - Полностью '======================== Примеры ===================================== ' %p %L - Комметарий, режим вводится во всплывающих диалогах (если коментарий оставить в окне пустым, он берётся из буфера) ' %p %L "Мой комментарий" - Режим вводится во всплывающих диалогах ' %p %L "Мой комментарий" 1 - Комментарий добавляется, режим места вводится в диалоге ' %p %L "Мой комментарий" 1 1 - Комментарий добавляется в начало ' %p %L "" 2 3 - Полностью удаляются комментарии для выделенного
' %p %L "####" 1 1 - добавления комментария ''####'' в начало ' %p %L "####" 2 1 - удаление комментария ''####'' в начале ' %p %L "####" 1 2 - добавления комментария ''####'' в конец ' %p %L "####" 2 2 - удаление комментария ''####'' в конеце
' Автор: Batya & Аверин Андрей ' Версия: 1.2 (28.08.2006 - 30.10.2011) ' Site: http://tc-image.3dn.ru '======================================================================== Dim TextComm, M1, M2 Titles = "Групповое комментирование " Cnt = WScript.Arguments.Count If Cnt < 2 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть прописано минимум 2 параметра %p %L",_ vbOKOnly & vbInformation, Titles WScript.Quit End If If Cnt < 3 Then TextComm = InputBox("Введите комментарий, который необходимо внести\удалить" & vbNewLine &_ "(по умолчанию комментарий берётся из буфера обмена)", Titles) Else TextComm = WScript.Arguments(2) End If If Cnt < 4 Then M1 = InputBox("Введите режим работы с комментарием ." & vbNewLine &_ "Если хотите добавить коментарий - введите 1." & vbNewLine &_ "Если хотите удалить - введите 2." & vbNewLine &_ "Если инвертировать - введите 3" & vbNewLine &_ "(по умолчанию число равно 1)", Titles, "1") If Len(M1) = 0 Then WScript.Quit Else M1 = WScript.Arguments(3) End If If M1 < 1 Or M1 > 3 Then ErrComm
If Cnt < 5 Then M2 = InputBox("Введите режим места комментария ." & vbNewLine &_ "Если хотите добавить в начало - введите 1." & vbNewLine &_ "Если хотите добавить в конец - введите 2." & vbNewLine &_ "Если хотите добавить полностью - введите 3" & vbNewLine &_ "(по умолчанию число равно 1)", Titles, "1") If M2 = "" Then WScript.Quit If Len(M2) = 0 Then WScript.Quit Else M2 = WScript.Arguments(4) End If
Dim Mode2 If WScript.Arguments.Count < 2 Then Mode2 = 1 Else Mode2 = M2 End If
If Mode2 < 1 Or Mode2 > 3 Then ErrComm
Dim CommLabel CommLabel = TextComm If Len(CommLabel) = 0 Then CommLabel = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") If Len(CommLabel) = 0 Then ErrComm CommLabel = Replace(CommLabel, vbNewLine, " ") CommLabel = Replace(CommLabel, Chr(10), " ") CommLabel = Replace(CommLabel, Chr(13), " ") End If
Dim FSO, oTextFile, OTF, oCommFile Dim AllText, FileName, CommFile, BegFile, BegFileComm, EndFileComm Dim Mode1, CompareComm, FindComm, LenC Set FSO = CreateObject("Scripting.FileSystemObject") CommFile = WScript.Arguments(0) & "descript.ion" Mode1 = M1 : LenC = Len(CommLabel)
If FSO.FileExists(CommFile) Then Set oTextFile = FSO.OpenTextFile(CommFile, 1) On Error Resume Next 'Игнорируем ошибку, если файл пустой AllText = oTextFile.ReadAll On Error GoTo 0 oTextFile.Close Else On Error Resume Next Set oTextFile = FSO.CreateTextFile(CommFile) If Err.Number = 0 Then oTextFile.Close With FSO.GetFile(CommFile) .Attributes = .Attributes Or 2 End With AllText = "" Else ErrWrite : Err.Clear : Set oTextFile = Nothing : Set FSO = Nothing : WScript.Quit End If End If
Set OTF = FSO.OpenTextFile(WScript.Arguments(1), 1) Do While Not OTF.AtEndOfStream FileName = OTF.ReadLine If FSO.FileExists(FileName) Then FileName = FSO.GetFile(FileName).Name Else FileName = FSO.GetFolder(FileName).Name End If If InStr(1, FileName, " ", 1) > 0 Then FileName = """" & FileName & """" BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1) If BegFile > 0 Then 'Есть какой-то комментарий для текущего файла BegFileComm = BegFile + Len(FileName) + 1 'Позиция начала комментария EndFileComm = InStr(BegFileComm, AllText & vbNewLine, vbNewLine, 1) 'Конец комментария + 1 If EndFileComm - BegFileComm < LenC Then 'Существующий комм. не равен указанному FindComm = 0 Else 'Поверяем дальше CompareComm = Mid(AllText, BegFileComm, EndFileComm - BegFileComm) If StrComp(CompareComm, CommLabel, 1) = 0 Then 'Существующий комм. = указанному FindComm = 2 Else Select Case Mode2 Case 1 'Начало If InStr(1, Left(CompareComm, LenC), CommLabel, 1) > 0 Then FindComm = 1 Else FindComm = 0 End If Case 2 'Конец If InStr(1, Right(CompareComm, LenC), CommLabel, 1) > 0 Then FindComm = 1 Else FindComm = 0 End If Case 3 'Полностью FindComm = 0 End Select End If End If If FindComm = 0 Then 'Существующий комм. не равен указанному If Mode1 = 1 Or Mode1 = 3 Then 'Добавляем комментарий Select Case Mode2 Case 1 AllText = Left(AllText, BegFileComm - 1) & CommLabel & " " & Mid(AllText, BegFileComm) Case 2 AllText = Left(AllText, EndFileComm - 1) & " " & CommLabel & Mid(AllText, EndFileComm) Case 3 AllText = Left(AllText, BegFileComm - 1) & CommLabel & Mid(AllText, EndFileComm) End Select End If If Mode1 = 2 Or Mode2 = 3 Then AllText = DelLine(AllText, BegFile, EndFileComm) ElseIf FindComm = 1 Then 'Указанный комментарий есть If Mode1 = 2 Or Mode1 = 3 Then 'Удаляем комментарий Select Case Mode2 Case 1 AllText = Left(AllText, BegFileComm - 1) & Mid(AllText, BegFileComm + LenC + 1) Case 2 AllText = Left(AllText, EndFileComm - LenC - 2) & Mid(AllText, EndFileComm) Case 3 AllText = DelLine(AllText, BegFile, EndFileComm) End Select End If If Mode1 = 1 Or Mode2 = 3 Then AllText = Left(AllText, BegFileComm - 1) & CommLabel & Mid(AllText, EndFileComm) Else 'FindComm = 2 - Существующий комментарий равен указанному If Mode1 = 2 Or Mode1 = 3 Then AllText = DelLine(AllText, BegFile, EndFileComm) End If If Mode1 = 2 Or (Mode1 = 3 And (FindComm = 1 Or FindComm = 2)) Then' Обработаем после удаления If Instr(BegFile, AllText, FileName & " ", 1) > 0 Then AllText = Left(AllText, BegFileComm - 2) & Mid(AllText, BegFileComm) If Instr(BegFile, AllText & vbNewLine, FileName & " " & vbNewLine) > 0 Then AllText = Left(AllText, BegFile - 1) & Mid(AllText, BegFile + Len(FileName & " " & vbNewLine)) If Right(AllText, Len(vbNewLine)) = vbNewLine Then AllText = Left(AllText, Len(AllText) - Len(vbNewLine)) If Right(AllText, Len(vbNewLine)) = vbNewLine Then AllText = Left(AllText, Len(AllText) - Len(vbNewLine)) If Len(AllText) = 0 Then FSO.DeleteFile(CommFile) End If If Len(AllText) > 0 Then On Error Resume Next With FSO.OpenTextFile(CommFile, 2) If Err.Number = 0 Then .Write AllText : .Close Else ErrWrite : Err.Clear : Exit Do End If End With On Error GoTo 0 End If Else 'Нет комментариев для файла If Mode1 = 1 Or Mode1 = 3 Then 'Добавляем комментарий On Error Resume Next With FSO.OpenTextFile(CommFile, 8, 2) If Err.Number = 0 Then If Right(AllText, Len(vbNewLine)) <> vbNewLine Then .WriteLine : AllText = AllText & vbNewLine .Write FileName & " " & CommLabel : .Close : AllText = AllText & FileName & " " & CommLabel Else ErrWrite : Err.Clear : Exit Do End If End With On Error GoTo 0 End If End If Loop
OTF.Close :Set oTextFile = Nothing : Set OTF = Nothing : Set FSO = Nothing : WScript.Quit
Function DelLine(FullText, BegLine, EndLine) If BegLine > Len(vbNewLine) Then DelLine = Left(FullText, BegLine - 1 - Len(vbNewLine)) & Mid(FullText, EndLine) ElseIf EndLine - 1 + Len(vbNewLine) <= Len(FullText) Then DelLine = Left(FullText, BegLine - 1) & Mid(FullText, EndLine + Len(vbNewLine)) Else DelLine = "" End If End Function
Sub ErrComm MsgBox "Не определен комментарий", vbOKOnly + vbExclamation, Titles : WScript.Quit End Sub
Sub ErrWrite MsgBox "Запись в " & CommFile & " невозможна из-за ошибки:" &_ vbNewLine & Err.Description, vbOKOnly + vbCritical, Titles End Sub
Дата: Понедельник, 31.10.2011, 00:55 | Сообщение # 59
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Создание ВЛОЖЕННЫХ друг в друга каталогов из строки типа кат1|кат2|кат3|кат4
Code
' CreateFolderLine.vbs '======================== Описание ===================================== ' Создание ВЛОЖЕННЫХ друг в друга каталогов из строки типа кат1|кат2|кат3|кат4 ' Можно ввести и строку типа "c:\Files\Scripts\1\3\" - с:\ не будет браться в расчёт ' Вместо | могут разделителями могут быть * \ / ? | : < > ' строка 1/2*3?4>5<6|7\8"9:10 создаст 10 каталогов 1 в нём 2 в нём 3 ... '======================== Параметры ===================================== 'Параметры вызова {"путь\создания\папок\"} 'Пример %p ' ' Автор: Аверин Андрей ' Версия: 1.5 (15.11.2010 - 20.08.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================================== Option Explicit Const Titles = "Создание ВЛОЖЕННЫХ друг в друга каталогов" If WScript.Arguments.Count < 1 Then MsgBox "Неправильно указано количество параметров!" & vbNewLine &_ "Должен быть минимум Один параметр %p", vbOKOnly & vbInformation, Titles WScript.Quit End If Dim FSO, NewFold, i, n, m, k, Line, LineX, Name, Path Path = CreateObject("Shell.Application").NameSpace(WScript.Arguments(0)).Self.Path & "\" Name = "" : LineX = "\/>""""<|*?:" Line = InputBox("Введите СТРОКУ создаваемых каталогов." & vbNewLine &_ "Пример: папка1\папка2\папка3\папка4\" & vbNewLine &_ "Разделителем может быть \ * / | > < ? : """ & vbNewLine &_ "Можно ввести с:\k1\k2\ и в кавычках" & vbNewLine &_ "Лишнее будет отсекаться и создадутся" & vbNewLine &_ "каталоги k1, а в нём k2 в текущей панели", Titles,"Папка1|Папка2\Папка3/Папка4?Папка5") If Len(Line) = 0 Then Wscript.Quit
For i = 1 To Len(LineX)*3 n = Mid(LineX, i, 1) If Left(Line, 1) = n Then Line = Right(Line, Len(Line) - 1) If Right(Line, 1) = n Then Line = Left(Line, Len(Line) - 1) Next
If Mid(Line, 2, 2) = ":\" Then Line = Right(Line, Len(Line) - 3)
For i = 1 To Len(Line) n = Mid(Line, i, 1) If n = "\" Or n = "|" Or n = "/" Or n = "*" Or n = "?" Or n = ":" Or n = """" Or n = ">" Or n = "<" Then If i <> Len(Line) And k <> 1 Then CreateFold : Path = Path & Name & "\" : Name = "" : m = i : k = 1 End If Else Name = Name & n : k = 0 End If Next
Name = "" : n = Right(Line, 1)
If n <> "\" Or n <> "|" Or n <> "/" Or n <> "*" Or n <> "?" Or n <> ":" Or n <> """" Or n <> ">" Or n <> "<" Then Name = Mid(Line, m+1) : CreateFold End If Wscript.Quit
Sub CreateFold : CreateObject("Scripting.FileSystemObject").CreateFolder(Path & Name) : End Sub
Дата: Понедельник, 31.10.2011, 16:12 | Сообщение # 60
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Создание ярлыка из кнопки Total Commander'a. Предварительно необходимо скопировать кнопку в буфер обмена
Code
' LinkFromBufferButtonTC.vbs '======================== Описание =============================== ' Создание ярлыка из кнопки Total Commander'a на панели инструментов ' Предварительно необходимо скопировать кнопку в буфер обмена '======================== Параметры =============================== ' Параметры {"Путь\сохранения\ярлыка\"} ' %p ' "%%USERPROFILE%%\Desktop\" - Сохранить на рабочий стол ' "%%APPDATA%%\Microsoft\Internet Explorer\Quick Launch\" - Сохранить в быстрый запуск
' Автор: Аверин Андрей ' Версия: 2.1 (08.08.10 - 03.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '================================================================== Titles = "Создание ярлыка из кнопки Total Commander'a" If WScript.Arguments.Count > 0 Then tPath= GetPath(WScript.Arguments(0)) Else MsgBox "Не хватает параметров! Должен быть один параметр %p", vbOKOnly & vbInformation,Titles : WScript.Quit End If Clip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") : Desc = "" If Len(Clip) = 0 Or InStr(Clip, vbNewLine) = 0 Then WsEnd
On Error Resume Next Button = Split(Clip, vbNewLine) If Button(0) <> "TOTALCMD#BAR#DATA" Then WsEnd Trg = Trim(GetPath(Button(1))) : Arg = Trim(GetPath(Button(2))) : Icon = Trim(GetPath(Button(3))) : fName = Button(4) If Len(Trg) < 3 Then WsEnd pr = LCase(Mid(Trg, 1, 3)) If pr = "cm_" Or pr = "em_" Then WsEnd If Left(Trg, 1) = Chr(34) Then Trg = Mid(Trg, 2) If Right(Trg, 1) = Chr(34) Then Trg = Mid(Trg, 1, Len(Trg) - 1)
If Len(fName) > 0 Then Delim = InStr(fName, Chr(32) & "-" & Chr(32)) If Delim > 0 Then Desc = Mid(fName, Delim + 3) : fName = Left(fName, Delim - 1) End If End If
' Проверка содержит ли путь вначале CD If UCase(Mid(Trg,1,3)) = "CD " Then Trg = Right(Trg, Len(Trg) - 3) : Icon = ",0" End If
If fName <> "" Then NoSym = "\/?:*><|" & Chr(34) For i = 1 To Len(NoSym) sym = Mid(NoSym,i,1) If InStr(1,fName, sym) > 0 Then fName = Replace(fName, sym ,"_") Next End If
If InStrRev(Trg,"\") = Len(Trg) Then Trg = Left(Trg,Len(Trg) - 1) If fName = "" Then fName = Right(Trg, Len(Trg) - InStrRev(Trg, "\"))
With CreateObject("WScript.Shell").CreateShortcut(tPath & "\" & fName & ".lnk") .Arguments = Arg .Description = Desc '.HotKey = "CTRL+ALT+SHIFT+X" ' Присвоение горячей клавиши, если надо - убрать ' в начале строки .IconLocation = Icon .TargetPath = Trg .WindowStyle = 1 .WorkingDirectory = CreateObject("Scripting.FileSystemObject").GetParentFolderName(Trg) .Save End With WScript.Quit
Sub WsEnd MsgBox "В буфере обмена находятся некоректные данные" & vbNewLine &_ "Выделите кнопку на панели TC и повторите заново", vbOKOnly & vbInformation, Titles : WScript.Quit End Sub
Function GetPath(pPath) : GetPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings(pPath) : End Function