Скрипты - уникальный инструмент для достижения различных целей в работе с файлами и не только, особенно в файловом менеджере, даже если вы ничего раньше об этом ничего не слышали и не знали, то путём простых движений вы можете оптимизировать свои действия Тема тестирования скриптов создана для увеличения функциональности 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
Дата: Суббота, 12.11.2011, 19:05 | Сообщение # 101
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Выделяет файлы "зеброй" в текущей в панели Используется NirCmd.exe и TCMC.exe - файлы можете скачать в шапке темы
Code
' ZebraMarker.vbs '======================== Описание ======================================= ' Выделяет файлы "зеброй" текущей в панели ' Выделяет при команде cm_DirBranch и в окне после поиска '======================== Параметры ======================================= ' 1-й параметр: %L (не обязательный) '======================== Примеры ======================================= ' без параметра - выделяет всё в текущей панели (нормально работает до 10000 файлов) ' %L - Выделить ВЫДЕЛЕННОЕ "зеброй" (работает почти при любом к-ве файлов)
' Автор: Аверин Андрей ' Версия: 1.6 (23.10.2010 - 16.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================== Изменяемые пути ================================= Program = "%COMMANDER_PATH%\NirCmd.exe" MzList = "%COMMANDER_PATH%\Files\Lists\MarkerList\MarkerList.txt" ' любой файл TCMC = "%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe" '========================================================================== Dim FSO, WSH Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = WScript.CreateObject("WScript.Shell")
Cnt = WScript.Arguments.Count Select Case Cnt Case 0 RunTCMC("CM523") : WScript.Sleep 300 : RunTCMC("CM2018") : WScript.Sleep 1000 zText = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") WScript.Sleep 200 Case 1 On Error Resume Next zText = FSO.OpenTextFile(WScript.Arguments(0), 1).ReadAll End Select
Set WSH = Nothing : Set FSO = Nothing : WScript.Quit Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function Sub RunTCMC(Param) : WSH.Exec(Chr(34) & TCMC & Chr(34) & Chr(32) & Chr(34) & Param & Chr(34)) : End Sub
Function RegExpReplace(pText, pFindStr, pNewStr) With New RegExp .Pattern = pFindStr : .IgnoreCase = True : .Global = True : RegExpReplace = .Replace(pText, pNewStr) End With End Function
Дата: Суббота, 12.11.2011, 21:44 | Сообщение # 102
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Поиск кусков текста и замена
Code
; RepleceTextInFiles.au3 ; ================ Описание =========================== ; Поиск кусков текста и замена ; =============== Параметры =========================== ; 1-й параметр: %L ; 2-й параметр: Количество полей поиска, если = 0, открывается диалог выбора количества полей ; 3-й параметр: Высота одного поля поиска ; ================ Примеры =========================== ; %L 0 100 ; %L 2 100 ; Автор: Loopback ; Версия: 1.0 (06.10.2010) ; ====================================================== If $CmdLine[0] < 3 Then MsgBox (0, "", "Недостаточно параметров, должно быть 3.") Exit EndIf
Global $gSrcCount = $CmdLine[2] Global $gSrcHeight = $CmdLine[3]
Global $gClientHeight = @DesktopHeight - 30 $aTrayPos = WinGetPos("[CLASS:Shell_TrayWnd]") If Not @error Then $gClientHeight = @DesktopHeight - $aTrayPos[3]
If $gSrcCount = 0 Then $gBtnCount = 9 ; Количество кнопок $nGUIWidth = 6 + $gBtnCount * 24 + $gBtnCount * 5 GUICreate("Выбор числа полей поиска", $nGUIWidth, 34, @DesktopWidth/2 - $nGUIWidth/2, -1) For $i = 0 To $gBtnCount - 1 GUICtrlCreateButton($i+1, 5 + $i*24 + $i*5, 5, 24, 24) Next GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case -3 Exit Case 3 To $gBtnCount + 2 $gSrcCount = $nMsg - 2 If $gClientHeight < $gSrcHeight * $gSrcCount + 140 Then $gSrcHeight = Int(($gClientHeight - 140) / $gSrcCount) EndIf GUIDelete() ExitLoop EndSwitch Wend EndIf
Global $aList = _TCHLoadFileList($CmdLine[1]) Global $gReplaces = 0, $gMask, $gBackups = False Global $gSrcEdit[$gSrcCount] Global Const $GUI_CHECKED = 1
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case -3, $btnCancel Exit Case $btnOK $gMask = _MaskToRegexp(GUICtrlRead($edMask)) $gBackups = BitAND(GUICtrlRead($cbBackups), $GUI_CHECKED) For $i = 1 To $aList[0] If StringRight($aList[$i], 1) = "\" Then _DoFolder($aList[$i]) Else _DoFile($aList[$i]) EndIf Next MsgBox (0, "", "Выполнено замен: " & $gReplaces, 0, $hGUI) Exit EndSwitch WEnd
Func _DoFolder($sFolder) If $sFolder = "" Then Return Local $sDirs = "" Local $hSearch = FileFindFirstFile($sFolder & "*.*") If @error Then Return While 1 $sFile = FileFindNextFile($hSearch) If @error Then ExitLoop If @extended Then $sDirs &= $sFolder & $sFile & "\" & @LF ContinueLoop EndIf _DoFile($sFolder & $sFile) Wend FileClose($hSearch) ; Обработку каталогов приходится делать отдельно, ; чтобы не оставлять открытый поисковый хэндл, ; их максимально может быть 64 $aDirs = StringSplit($sDirs, @LF) For $i = 1 To $aDirs[0] _DoFolder($aDirs[$i]) Next EndFunc
Func _DoFile($sFile) If StringRegExp($sFile, $gMask) = 0 Then Return Local $sText = FileRead($sFile) Local $sSrc Local $nReplaces = 0 For $i = 0 To $gSrcCount - 1 $sSrc = GUICtrlRead($gSrcEdit[$i]) If $sSrc = "" Then ContinueLoop $sText = StringReplace($sText, $sSrc, GUICtrlRead($edTrg), 0, _ BitAND(GUICtrlRead($cbCaseSence), $GUI_CHECKED)) $nReplaces += @extended Next If $nReplaces = 0 Then Return $gReplaces += $nReplaces If $gBackups Then FileCopy($sFile, $sFile & ".bak", 1) ; бэкап Local $hFile = FileOpen($sFile, 2) FileWrite($hFile, $sText) FileClose($hFile) EndFunc
For $i = 1 To $aList[0] If StringRight($aList[$i], 1) = "\" Then _DoFolder($aList[$i]) Else _DoFile($aList[$i]) EndIf Next MsgBox (0, "", "Завершено.", 0, $hGUI) If BitAND(GUICtrlRead($cbCloseDone), $GUI_CHECKED) Then Exit WinSetState($hGUI, "", @SW_ENABLE) EndSwitch WEnd
Func _DoFolder($sFolder) If $sFolder = "" Then Return Local $sDirs = "" Local $hSearch = FileFindFirstFile($sFolder & "*.*") If @error Then Return While 1 $sFile = FileFindNextFile($hSearch) If @error Then ExitLoop If @extended Then $sDirs &= $sFolder & $sFile & "\" & @LF ContinueLoop EndIf _DoFile($sFolder & $sFile) Wend FileClose($hSearch) ; Обработку каталогов приходится делать отдельно, ; чтобы не оставлять открытый поисковый хэндл, ; их максимально может быть 64 $aDirs = StringSplit($sDirs, @LF) For $i = 1 To $aDirs[0] _DoFolder($aDirs[$i]) Next EndFunc
Func _ProcessLines(ByRef $aSrcFile, ByRef $aTrgFile, $sText, $sFilter, $nMode) If $sText = "" Then Return For $i = 1 To $aSrcFile[0] Switch $nMode Case 0, 2 If ($sFilter <> "") Then $sLeft = StringLeft($aSrcFile[$i], StringLen($sFilter)) If $gCaseSence Then If Not ($sLeft == $sFilter) Then ContinueLoop Else If $sLeft <> $sFilter Then ContinueLoop EndIf EndIf If $nMode = 2 Then $aTrgFile[$i] = @CRLF & $aTrgFile[$i] $aTrgFile[$i] = $sText & $aTrgFile[$i] Case 1, 3 If ($sFilter <> "") Then $sRight = StringRight($aSrcFile[$i], StringLen($sFilter)) If $gCaseSence Then If Not ($sRight == $sFilter) Then ContinueLoop Else If $sRight <> $sFilter Then ContinueLoop EndIf EndIf If $nMode = 3 Then $aTrgFile[$i] = $aTrgFile[$i] & @CRLF $aTrgFile[$i] = $aTrgFile[$i] & $sText EndSwitch Next EndFunc
Func _DoFile($sFile) If StringRegExp(StringLower($sFile), $gMask) = 0 Then Return Local $aSrcFile = _TCHLoadFileList($sFile) If $gRemoveEmpty And ($aSrcFile[0] > 0) Then Local $aTrgFile[$aSrcFile[0]+1] = [0] For $i = 1 To $aSrcFile[0] If $aSrcFile[$i] <> "" Then $aTrgFile[0] += 1 $aTrgFile[$aTrgFile[0]] = $aSrcFile[$i] EndIf Next ReDim $aTrgFile[$aTrgFile[0] + 1] $aSrcFile = $aTrgFile Else Local $aTrgFile = $aSrcFile EndIf
If $gBackups Then FileCopy($sFile, $sFile & ".bak", 1) ; бэкап Local $hFile = FileOpen($sFile, 2) For $i = 1 To $aTrgFile[0] FileWriteLine($hFile, $aTrgFile[$i]) Next FileClose($hFile) EndFunc
Дата: Суббота, 12.11.2011, 22:22 | Сообщение # 104
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Копирование из файлов XLS, XLSX строк, столбцов в текстовый файл
Code
; CopyXlsInText.au3 ; ================ Описание =================================== ; Копирование из файлов XLS, XLSX строк, столбцов в текстовый файл ; ================ Параметры =================================== ; В командной строке должно быть прописано 7 - 11 параметров: ; - - - - - - - - - - - - - - - - - Обязательные - - - - - - - - - - - - - - - - - - - - ; 1) Номер листа с какого считывать информацию ; 2) С какой строки начать считывание ; 3) С какого столбца начать считывание ; 4) К-во считываемых рядов (строк) (0 - все) ; 5) К-во считываемых колонок (столбцов) ; 6) Путь\к\файлу.xls ; 7) Путь\к\сохранению\файла.txt ; (можно вводить пути с переменными окружения) ; - - - - - - - - - - - - - - - Дополнительные - - - - - - - - - - - - - - - - - - - - ; 8) 1 = Удалять пустые строки 0 = оставить как есть ; 9) строка-вставка между колонками ; 10) строка-вставка в начале строки ; 11) строка-вставка в конце строки ; ================ Примеры =================================== ; 1 2 0 4 "%%COMMANDER_PATH%%\Files\Lists\CreateMenu\WcmMenuImage.xlsx" "%%COMMANDER_PATH%%\Text.ini" ; 1 2 0 4 "%%COMMANDER_PATH%%\Files\Lists\CreateMenu\WcmMenuImage.xlsx" "%%COMMANDER_PATH%%\Text.ini" 1 "___" "| " " |" ; 1 1 1 0 0 %P%N "%T%O.txt" 1 " " Копирование первого листа из xls под курсором в текстовый файл в соседнюю панель ; ; Автор: Аверин Андрей ; Версия: 1.0 (12.10.2010) ; Mail: Averin-And@yandex.ru ; Site: http://tc-image.3dn.ru ; =============================================================== #include <Excel.au3>
If $CmdLine[0] < 7 Then MsgBox(16 + 262144, "Запись из табличного файла строк и столбцов в файл", _ "Не хватает параметров!" & @CRLF & "Должно быть минимум СЕМЬ, а у вас" & _ $CmdLine[0] & @CRLF & "Пропишите и повторите попытку!" & @CRLF & _ "Подробную информацию читайте в коментариях скрипта", 10) Exit Endif
if $RowCnt = 0 Then $RowCnt = UBound($aData,1) - 1 ;размерность массива (к-во строк) if $ColCnt = 0 Then $ColCnt = UBound($aData,2) - 1 ;размерность массива (к-во колонок)
; Открываем выходной файл для записи - с очисткой $hFile = FileOpen($TxtFile, 2)
; Записываем данные For $i=1 To $RowCnt For $j=1 To $ColCnt if $aData[$i][$j] = "" Then $aData[$i][$j] = "" $Text = $Text & StringFormat("%s", $aData[$i][$j]) & $Insert $Control = $Control & $Insert Next ; проверка на пустые строки if $Contr = 1 And StringCompare($Control, $Text,2) = 0 Then Else FileWriteLine($hFile, $InsertLeft & $Text & $InsertRight) Endif $Text = "" $Control = "" Next
; функция разворачивания переменных окружения 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
Дата: Воскресенье, 13.11.2011, 10:42 | Сообщение # 105
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Перемещение выделенных файлов\папок по заданному количеству в отдельные (создаваемые) папки
Code
' MoveGroupFileInFolders.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 .MoveFile F, Path If .FolderExists(F) Then If Right(F, 1) = "\" Then F = Left(F, Len(F) - 1) .MoveFolder 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
Дата: Воскресенье, 13.11.2011, 11:47 | Сообщение # 106
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Перемещение выделенных файлов каждый в отдельную именную папку
Code
' MoveInEveryOneNameFolder.vbs '======================== Описание ========================= ' Перемещение выделенных файлов каждый в отдельную именную папку ' В параметрах вызова из TC должно быть прописанo Два параметра: ' {список файлов} {"путь\перемещения\"} ' %L %p ' %L %t ' Автор: Аверин Андрей ' Версия: 1.1 (2010 - 29.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '============================================================ If WScript.Arguments.Count > 1 Then With CreateObject("Scripting.FileSystemObject") Set ListFile = .OpenTextFile(WScript.Arguments(0), 1) tPath = WScript.Arguments(1)
Do While Not ListFile.AtEndOfStream SelFile = ListFile.ReadLine : Name = .GetBaseName(SelFile) If Not .FolderExists(tPath & Name) Then .CreateFolder(tPath & Name) .MoveFile SelFile, tPath & Name & "\" Loop End With Set ListFile = Nothing Else MsgBox "Не заданы параметры!" & vbNewLine &_ "Должно быть ДВА параметра. Пример: %L %t",_ vbOKOnly + vbInformation, "Перемещение файлов каждый в именную папку" End If WScript.Quit
' MoveFileInAssociationsFolders.vbs '====================================================================== ' Перемещение\Копирование выделенных файлов по Ассоциированным Папкам ' Ассоциированные папки и расширения считываются из файла ' Синтаксис файла: ' Папка=;расширение1;расширение2; ' Архивы=;7z;7zip; ' Музыка=;mp3;wal; ' т.е если в выделенных файлах будет встречен ...7zip, то он будет перемещён\скопирован в папку "Архивы" '======================== Параметры =================================== ' 1-й параметр: Cписок файлов ' 2-й параметр: путь\где\будут\создаваться\папки ' 3-й параметр: путь\к\файлу_ассоциаций '======================== Примеры =================================== ' %L %t "%%COMMANDER_PATH%%\Scripts\Move\MoveFileInAssociationsFolders.txt" ' ' Автор: Аверин Андрей ' Версия: 1.1 (24.12.2010 - 13.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '====================================================================== Option Explicit Dim File, List, Folder, Count, i, Path, ExtLines, Name, Ext
If WScript.Arguments.Count < 3 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должно быть ТРИ параметра!" & vbNewLine &_ "%L %t ''Путь\к\MoveFileOnExt.txt''", vbOKOnly &_ vbInformation, "Перемещение файлов по любимым папкам" Wscript.Quit End if
With CreateObject("Scripting.FileSystemObject") Set List = .OpenTextFile(GetPath(WScript.Arguments(0)), 1) Path = WScript.Arguments(1) If Right(Path, 1) <> "\" Then Path = Path & "\" ExtLines = Split(.OpenTextFile(GetPath(WScript.Arguments(2)), 1).ReadAll, vbNewLine)
Do While Not List.AtEndOfStream File = List.ReadLine Name = .GetBaseName(File) : Ext = .GetExtensionName(File) For i = 0 To Ubound(ExtLines) If InStr(1,ExtLines(i), ";" & Ext & ";") > 0 Then Folder = Mid(ExtLines(i),1,InStr(1,ExtLines(i), "=") - 1) : i = Ubound(ExtLines) If Not .FolderExists(Path & Folder) Then .CreateFolder(Path & Folder)
'раскомментируйте\закоментируйте строку, если хотите перемещатьфайлы (MoveFile) If .FileExists(File) Then .MoveFile File, Path & Folder & "\" & Name & "." & Ext 'раскомментируйте\закоментируйте строку, если хотите копироватьфайлы (CopyFile) 'If .FileExists(File) Then .CopyFile File, Path & Folder & "\" & Name & "." & Ext End if Next Loop End With List.Close : Set List = Nothing : Wscript.Quit
Function GetPath(pPath) GetPath = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings(pPath) End Function
Дата: Воскресенье, 13.11.2011, 15:46 | Сообщение # 108
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Перемещение музыкальных файлов в папки c именами артистов
Code
;MoveMusicTracks.au3 ; ======================== Описание ============================ ; Перемещение выделенных музыкальных файлов в папки c именами артистов ;(если папки нет, она создаётся) ; ======================== Параметры ============================ ; {Список файлов} {Путь куда перемещать} ;%L %t ; ; Автор: Аверин Андрей ; Версия: 1.0 (04.04.2011) ; Mail: Averin-And@yandex.ru ; Site: http://tc-image.3dn.ru ; =============================================================== $aList = _TCHLoadFileList($CmdLine[1])
$Stroka = "&;Feat; и ;Ft.;Vs.;(;+;Феат;,;-and-;_and_; and при уч.;feat. ; При Участии ;, ; pres ; pres. ; present ; vs ; vs. ; ft ;(vs ;уч. " $Rez = StringSplit($Stroka, ";", 1) $k = 0
For $i = 1 To $aList[0] $sTemp = $aList[$i] $sTemp = StringRight($sTemp, StringLen($sTemp) - StringInStr($sTemp,"\",1,-1)) if StringInStr($sTemp, " - " ,1, 1) > 0 Then For $s = 1 To UBound($Rez) - 1 $sss = StringUpper($Rez[$s]) if StringInStr(StringUpper($sTemp), $sss , 1, 1) > 0 Then if StringInStr($sTemp, " - " ,1, 1) > StringInStr(StringUpper($sTemp), $sss ,1, 1) Then $sTemp = StringLeft($sTemp, StringInStr(StringUpper($sTemp), $sss ,1, 1) - 1) $s = UBound($Rez) - 1 $k = 1 Endif Endif Next if $k = 0 Then $sTemp = StringLeft($sTemp, StringInStr($sTemp, "-" ,1, 1) - 1) $k = 0 $sTemp = StringStripWS($sTemp, 3) ; удалить пробелы в начале и вконце строки if StringLen($sTemp) <> 0 Then DirCreate($CmdLine[2] & $sTemp) ; создаём папку именем артиста FileMove($aList[$i], $CmdLine[2] & $sTemp) Endif Endif $sTemp = "" Next
; Загрузка списка, чтобы выстроить список файлов, полученных ; с параметров %L или %l Total Commandera 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
Дата: Воскресенье, 13.11.2011, 18:16 | Сообщение # 109
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Отправить в буфер полные\короткие имя артистов выделенных музыкальных треков
Code
; BuferMusicArtist.au3 ; ======================== Описание =========================================== ; Отправить в буфер полные\короткие имя артистов выделенных музыкальных треков ; ======================== Параметры =========================================== ; {Имя\Список файлов} {0\1} ; %L 0 - полное имя ; %L 1 - короткие имена ; ; Автор: Аверин Андрей ; Версия: 1.0 (04.04.2011) ; Mail: Averin-And@yandex.ru ; Site: http://tc-image.3dn.ru ; ============================================================================== $aList = _TCHLoadFileList($CmdLine[1])
$Stroka = "&;Feat; и ;Ft.;Vs.;(;+;Феат;,;-and-;_and_; and при уч.;feat. ; При Участии ;, ; pres ; pres. ; present ; vs ; vs. ; ft ;(vs ;уч. " $Rez = StringSplit($Stroka, ";", 1) $sText = "" $k = 0
For $i = 1 To $aList[0] $sTemp = $aList[$i] $sTemp = StringRight($sTemp, StringLen($sTemp) - StringInStr($sTemp,"\", 1, -1)) if StringInStr($sTemp, " - " , 1, 1) > 0 Then For $s = 1 To UBound($Rez) - 1 $sss = StringUpper($Rez[$s]) if StringInStr(StringUpper($sTemp), $sss , 1, 1) > 0 Then if StringInStr($sTemp, "-" , 1, 1) > StringInStr(StringUpper($sTemp), $sss , 1, 1) Then $sTemp = StringLeft($sTemp, StringInStr(StringUpper($sTemp), $sss , 1, 1) - 1) $s = UBound($Rez) - 1 $k = 1 Endif Endif Next if $k = 0 Then $sTemp = StringLeft($sTemp, StringInStr($sTemp, " - " , 1,1) - 1) $k = 0 $sTemp = StringStripWS($sTemp, 3) ; удалить пробелы в начале и вконце строки if StringLen($sTemp) <> 0 Then if $CmdLine[2] = 1 Then if StringInStr($sTemp, " " ,1 , 1) > 0 Then $sTemp = StringLeft($sTemp, StringInStr(StringUpper($sTemp), " " , 1, 1) - 1) Endif $sText = $sText & $sTemp & @CRLF Endif Endif $sTemp = "" Next
ClipPut(StringTrimRight($sText, 2)) ; отправить в буфер
; Загрузка списка, чтобы выстроить список файлов, полученных ; с параметров %L или %l Total Commandera 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
' RenameLongName.vbs '======================== Описание ===================================== ' Умное переименование выделенных составных имён файлов ' Файл replaceintextfilesfromfilelist.vbs будет переименован в ReplaceInTextFilesFromFileList.vbs '======================= Параметры ===================================== ' 1-й параметр: список файлов ' 2-й параметр: файл со словами ' любой 3-й параметр означает, что будет произведено полное переименование '======================== Примеры ===================================== ' %L "%%COMMANDER_PATH%%\Scripts\ReNames\RenameLongName.txt" ' %L "%%COMMANDER_PATH%%\Scripts\ReNames\RenameLongName.txt" 1
Set FSO = CreateObject("Scripting.FileSystemObject") SelFiles = FSO.OpenTextFile(GetPath(WScript.Arguments(0)), 1).ReadAll Spisok = Split((FSO.OpenTextFile(GetPath(WScript.Arguments(1)), 1)).ReadAll, vbNewLine) If WScript.Arguments.Count > 2 Then SelFiles = LCase(SelFiles) Text = SelFiles For n = 0 To Ubound(Spisok) k = InStr(Spisok(n), "=") If Len(Spisok(n)) > 0 And k > 2 Then sLeft = Left(Spisok(n), k - 1) : UpLeft = UCase(Left(sLeft, 1)) & Mid(sLeft, 2) If InStr(Text, UpLeft) > 0 Then Text = Replace(Text, UpLeft, "[[" & n & "]]") If InStr(Text, sLeft) > 0 Then Text = Replace(Text, sLeft, "[[" & n & "]]") End If Next
For n = 0 To Ubound(Spisok) nm = "[[" & n & "]]" If InStr(Text, nm) > 0 Then sRight = Mid(Spisok(n), InStr(Spisok(n), "=") + 1) : Text = Replace(Text, nm, sRight) End If Next
If ListFile <> Text Then basList = Split(SelFiles, vbNewLine) corList = Split(Text, vbNewLine) For n = 0 To Ubound(basList) If basList(n) <> corList(n) Then File = corList(n) File = FSO.GetParentFolderName(File) & "\" & FSO.GetBaseName(File) &_ "." & LCase(FSO.GetExtensionName(File)) On Error Resume Next FSO.MoveFile basList(n), File End If Next End If
Set FSO = Nothing : WScript.Quit Function GetPath(pPath) GetPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings(pPath) End Function
Дата: Понедельник, 14.11.2011, 10:27 | Сообщение # 111
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Назначение папке иконки из файла, т.е. создание файла Desktop.ini в этой папке
Code
' IconOnFolders.vbs '======================== Описание ===================================== ' Назначение папке иконки из файла, т.е. создание файла Desktop.ini в этой папке ' В диалоге вводится номер значка библиотеки '======================== Параметры ===================================== ' 1-й параметр: Папка, которой будет назначен значок ' 2-й параметр: Библиотека, значок ' Любой третий параметр не вызовет диалог ввода номера значка '======================== Примеры ===================================== ' "%P\" %P%N - Назначение папке значка из файла под курсором ' %P%N %T%M - Назначение папке значка из файла соседней панели ' %P%N "%%COMMANDER_PATH%%\Wcmicons.dll" Назначение папке значка из файла Wcmicons.dll ' "%P\" ""%N"" 1 - Назначение папке значка из файла под курсором без пути (без диалога)
' Автор: Аверин Андрей ' Версия: 1.2 (2010 - 21.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================================================================== Titles = "Назначение значка папке - Создание Desktop.ini " With WScript Cnt = .Arguments.Count If Cnt = 0 Then .Quit Number = 0 : TargetDir = .Arguments(0) : IconFile = .Arguments(1) If Cnt < 3 Then Number = InputBox("Введите номер значка в библиотеке," & vbNewLine &_ "(по-умолчанию номер = 0)",Titles , "0") If Len(Number) = 0 Then .Quit End If End With
Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FolderExists(TargetDir) Then If Right(TargetDir, 1) <> "\" Then TargetDir = TargetDir & "\" Else MsgBox "Не задано корректное имя папки!", vbOKOnly + vbExclamation, Titles : WsEnd End If
TrFile = TargetDir & "Desktop.ini" If FSO.FileExists(TrFile) Then FSO.DeleteFile(TrFile)
'Создадим Desktop.ini With FSO.CreateTextFile(TrFile, True) .WriteLine "[.ShellClassInfo]" .WriteLine "IconFile=" & IconFile .WriteLine "IconIndex=" & Number .WriteLine "IconResource=" & IconFile & "," & Number .Close End With
With FSO.GetFile(TrFile) .Attributes = .Attributes Or 38 End With With FSO.GetFolder(TargetDir) .Attributes = .Attributes Or 1 End With WsEnd Sub WsEnd : Set FSO = Nothing : WScript.Quit : End Sub
Дата: Понедельник, 14.11.2011, 12:21 | Сообщение # 112
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Запуск программ, скриптов, батников со СКОЛЬКО УГОДНО параметрами из файл списка ПО ОЧЕРЕДИ
Code
' RunProgramParam.vbs '======================== Описание ======================================== ' Запуск программ, скриптов, батников со СКОЛЬКО УГОДНО параметрами из файл списка ПО ОЧЕРЕДИ '======================= Дополнение ======================================== ' Программа и параметры в файл списке обрамить в квадратные скобки [ ] [ ] ' Пример: ' [%COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3.exe] [%COMMANDER_PATH%\Scripts\TextWork\CopyXlsInText.au3] [2] [1] [2] [0] [1] [%COMMANDER_PATH%\Files\Lists\CreateMenu\WcmMenuImage.xlsx] [%COMMANDER_PATH%\LANGUAGE\Wcmd_Rus.ini] [1] ' [%COMMANDER_PATH%\Files\Bat\CopyTcFilesFromTc.bat] [%COMMANDER_PATH%\Files\Bat\] '======================== Параметры ======================================== ' В параметрах вызова должно быть прописано: {путь к файл списку} ' Пример: "%%COMMANDER_PATH%%\Files\Lists\CreateMenu\RunWcmMenu.txt" ' ' Автор: Аверин Андрей ' Версия: 1.1 (2010) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '========================================================================= Option Explicit Dim WSH, ListFile, SelFile, Program, Param, FF, Data, i, Line, PData Set WSH = CreateObject("WScript.Shell")
FF = GetPath(WScript.Arguments(0)) Set ListFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(FF, 1)
Do While Not ListFile.AtEndOfStream SelFile = ListFile.ReadLine SelFile = Mid(SelFile, 2, Len(SelFile) - 2) Data = Split(SelFile, "] [")
For i = 0 To Ubound(Data) If Mid(Data(i), 1, 1) = "%" Then PData = GetPath(Data(i)) Else PData = Data(i) End if If Right(Data(i), 1) = "\" Then PData = PData & "\" Line = Line & PData & Chr(34) & Chr(32) & Chr(34) Next
WSH.Run Chr(34) & Line & Chr(34), 2, True Line = "" Loop
ListFile.Close : Set ListFile = Nothing : Set WSH = Nothing : WScript.Quit Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function
Пример Файл Списка программ, скриптов, батников... с параметрами. Скрипт по очереди запустит каждую, указанную команду
Дата: Понедельник, 14.11.2011, 14:55 | Сообщение # 113
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Переименование имён выделенных файлов по маске [P] [заданное слово] [C]
Code
' RenameDifferentCounter.vbs '======================== Описание ===================================== ' Переименование имён выделенных файлов по маске [P] [заданное слово] [C] ' [P] - имя родительской папки, ' [С] - отдельный счетчик для каждой папки. Если вы испрользовали cm_DirBranch '======================= Параметры ===================================== ' 1-й параметр: список файлов ' 2-й параметр: заданное слово, если "?", то без вставляемого слово ' 3-й параметр: разделитель между [P] [заданное слово] [C], если "?", то без разделителя ' если 2 и 3-й параметр пусты их можно ввести в диалоге ' 4-й параметр: разделитель, означает, что перед именем будетет добавлено ' имя "дедушкиной" папки + этот разделитель (маска [G] [P] [заданное слово] [C]) '======================== Примеры ===================================== ' %L ' %L "Name" "_" ' %L "?" ' %L "?" "?" ' %L "?" " - " ' %L "?" "_" "_" ' Автор: Batya & Аверин Андрей ' Версия: 1.2 (2009 - 14.11.2011) ' Site: http://tc-image.3dn.ru '======================================================================== Option Explicit '========== Изменяемые параметры ======================================== Const Precision = 4 ' Разрядность счетчика в маске '======================================================================== Dim Mess, FSO, FileList, F, P, PF, G, Ext, NewName, NewPath, gWord, Delim, Cnt Dim Errors, Counter SetMess Set FSO = CreateObject("Scripting.FileSystemObject") Set Errors = CreateObject("Scripting.Dictionary") Set Counter = CreateObject("Scripting.Dictionary") With WScript Cnt = .Arguments.Count If Cnt = 0 Then MessBox Mess(1), 1 : Quit End If FileList = .Arguments(0) If Not FSO.FileExists(FileList) Then MessBox Mess(2), 1 : Quit End If If Cnt < 2 Then gWord = InputBox("Переименование выделенных файлов из" & vbNewLine &_ "разных папок по маске [P] [ваше СЛОВО] [C]" & vbNewLine &_ "[P] - имя родительской папки," & vbNewLine &_ "[С] - отдельный счетчик для каждого [P]" & vbNewLine &_ "Вы можете ввести желаемое СЛОВО," & vbNewLine &_ "для отображении его в имени (? - без слова)", Mess(0), "?") If Len(gWord) = 0 Then Quit Else gWord = .Arguments(1) End If If Cnt < 3 Then Delim = InputBox("Вы можете задать разделитель между словами" & vbNewLine &_ "(если ввести ? разделителя не будет", Mess(0), "_") If Len(Delim) = 0 Then Quit Else Delim = .Arguments(2) End If If Delim = "?" Then Delim = "" If gWord = "?" Then gWord = "" Else gWord = gWord + Delim End If End With
For Each F In Split(FSO.OpenTextFile(FileList, 1, False).ReadAll, vbNewLine) F = Trim(F) If F <> "" Then If FSO.FileExists(F) Then Ext = "." & FSO.GetExtensionName(F) PF = FSO.GetParentFolderName(F) P = FSO.GetBaseName(PF) If Cnt > 3 Then G = FSO.GetBaseName(FSO.GetParentFolderName(PF)) & WScript.Arguments(3) Else G = "" End If If Not Counter.Exists(PF) Then Counter.Add PF, 1 Else Counter(PF) = Counter(PF) + 1 End If NewName = G & P & Delim & gWord & Num(Counter(PF), Precision) & Ext NewPath = PF & "\" & NewName On Error Resume Next FSO.MoveFile F, NewPath If Err.Number > 0 Then Errors.Add F & " -> " & NewName, vbNewLine & Err.Description On Error GoTo 0 End If End If Next
If Errors.Count > 0 Then MessBox JoinErr(Errors), 2 Else MessBox Mess(3), 3 End If Quit
Function Num(pC, pPrecision) Num = Right(String(pPrecision, "0") & pC, pPrecision) End Function
Sub SetMess Set Mess = CreateObject("Scripting.Dictionary") Mess.Add 0, "Переименование по маске" Mess.Add 1, "Не указаны параметры!" Mess.Add 2, "Входной параметр не является файлом!" Mess.Add 3, "Операция завершена." Mess.Add 4, "Операция завершена с ошибками." & vbNewLine Mess.Add 5, "Невозможно выполнить переименование:" & vbNewLine End Sub
Function JoinErr(pDic) Dim lKey For Each lKey In pDic JoinErr = JoinErr & vbNewLine & vbNewLine & Mess(5) & lKey & pDic(lKey) Next JoinErr = Mess(4) & JoinErr End Function
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 Set Counter = Nothing : Set Errors = Nothing : Set FSO = Nothing : Wscript.Quit End Sub
Дата: Понедельник, 14.11.2011, 15:48 | Сообщение # 114
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Перемещение файлов и папок без запроса
Code
; Move.au3 ; ================ Описание ============================= ; Перемещение выделенных файлов и папок без запроса ; =============== Параметры ============================= ; {Список файлов} {Путь куда перемещать} ;%L %t ; Автор: Аверин Андрей ; Версия: 1.0 (04.04.2011) ; Mail: Averin-And@yandex.ru ; Site: http://tc-image.3dn.ru ; ======================================================== $aList = _TCHLoadFileList($CmdLine[1]) For $i = 1 To $aList[0] if StringMid($aList[1], StringLen($aList[1]), 1) = "\" Then DirMove($aList[$i], $CmdLine[2], 1) else FileMove($aList[$i], $CmdLine[2]) Endif Next
; Загрузка списка, чтобы выстроить список файлов, полученных ; с параметров %L или %l Total Commandera 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
Дата: Вторник, 15.11.2011, 00:07 | Сообщение # 115
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Создание НУЖНОГО количества каталогов с именем текущей даты Используется TCMC.exe - файл можете скачать в шапке темы
Code
' BigDateNameFolder.vbs '======================== Описание ===================================== ' Создание НУЖНОГО количества каталогов с именем текущей даты [29.09.2010 - 10.25.33] '======================= Параметры ===================================== ' 1-й параметр: путь\где\создавать\каталоги ' 2-й параметр: имя перед датой ' 3-й параметр: количество создаваемых каталогов '======================== Примеры ===================================== ' %p - Создать в текущей папке каталоги с Датой, количество вводится в диалоге ' %p "%O " - Создать в текущей папке каталоги с именем под курсором + Дата, количество вводится в диалоге ' %p "" 10 - Создать в текущей папке 10 каталогов с Датой, количество вводится в диалоге ' %p "Моя папка " 100 ' ' Автор: Аверин Андрей ' Версия: 1.1 (08.08.2010 - 30.10.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '============================================================================ With WScript Cnt = .Arguments.Count If Cnt < 1 Then MsgBox "Неправильно указано количество параметров!" & vbNewLine &_ "Должен быть Один параметр %p", vbOKOnly & vbInformation, "Создание каталогов" .Quit End If
Path = .Arguments(0) If Cnt > 1 Then Insert = .Arguments(1) If Cnt > 2 Then Count = .Arguments(2) End If
If Len(Count) = 0 Then Count = InputBox("Введите нужное КОЛИЧЕСТВО создаваемых каталогов именем сегодняшней даты" &_ vbNewLine & "(по умолчанию число создаваемых каталогов равно 2)", "Создание каталогов ", 2) If Len(Count) = 0 Then .Quit End If
End With
YY = Year(Date) : MM = Month(Date) : DD = Day(Date) : H = Hour(Time) : M = Minute(Time) : S = Second(Time)
For i = 1 To Count FoldTime = "[" & Right("0" & YY, 2) & "." & Right("0" & MM, 2) & "." & Right("0" & DD, 2) &_ " - " & Right("0" & H, 2) & "." & Right("0" & M, 2) & "." & Right("0" & S, 2) & "]" Call CreateObject("Scripting.FileSystemObject").CreateFolder(Path & Insert & FoldTime) S = S + 1 if S = 60 Then S = 0 : M = M + 1 If M = 60 Then M = 0 : H = H + 1 if H = 23 Then H = 0 : DD = DD + 1 If DD = 31 And MM = 1 Then MM = MM + 1 If DD = 31 And MM = 3 Then MM = MM + 1 If DD = 31 And MM = 5 Then MM = MM + 1 If DD = 31 And MM = 7 Then MM = MM + 1 If DD = 31 And MM = 8 Then MM = MM + 1 If DD = 31 And MM = 10 Then MM = MM + 1 If DD = 31 And MM = 12 Then MM = 1 : YY = YY + 1 End If If DD = 30 And MM = 4 Then MM = MM + 1 If DD = 30 And MM = 6 Then MM = MM + 1 If DD = 30 And MM = 9 Then MM = MM + 1 If DD = 30 And MM = 11 Then MM = MM + 1 If DD = 28 And MM = 2 Then If YY/4 <> Atn(YY/4) Then MM = MM + 1 End If If DD = 29 And MM = 2 Then MM = MM + 1 End if End If End if Next
Дата: Четверг, 17.11.2011, 22:04 | Сообщение # 116
Генерал-лейтенант
Зареген: 28.05.2010
Всего сообщений: 387
Andrey_A, Спасибо за данную тему. Очень информативно и много. Буду разбираться и учится работать с .vbs и autoit - давно было желание, но времени и нужной инфы для быстрого старта собрать не удавалось. Еще раз спасибо!
Дата: Воскресенье, 20.11.2011, 12:37 | Сообщение # 117
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Выделение элементов с заданными интервалами и условием Используется NirCmd.exe и TCMC.exe - файлы можете скачать в шапке темы
Code
' MarkerCondition.vbs '======================== Описание ==================================== ' Выделение элементов с заданными интервалами и условием ' Выделяет так же в окне после поиска и при cm_DirBranch '======================== Параметры ==================================== ' 1-й параметр: %L ' 0 - выделяется всё в текущей панели ' > - выделяется от курсора вниз ' < - выделяется от курсора вверх ' %L - выделяется только выделенное ' 2-й параметр: К-во подряд выделяемых элементов ' 3-й параметр: К-во пропущенных элементов после выделения ' 4-й параметр: Условие ' без параметра - всё (и файлы и папки) ' 1 - только файлы ' 2 - только папки '======================== Примеры ==================================== ' 0 1 1 - выделяется всё в текущей панели зеброй ' > 2 2 - выделяется всё от курсора вниз крупной зеброй ' < 3 4 - выделяется всё от курсора вверх необычной зеброй ' %L 1 5 - выделяется всё что выделено редкой зеброй ' 0 1 1 1 - только файлы ' 0 3 3 2 - только папки
' Автор: Аверин Андрей ' Версия: 1.0 (20.11.2011) ' Mail: Averin-And@yandex.ru ' Site: http://tc-image.3dn.ru '======================== Изменяемые пути =============================== Program = "%COMMANDER_PATH%\NirCmd.exe" TCMC = "%COMMANDER_PATH%\Utilities\TotalCom\TCMC\TCMC.exe" MzList = "%COMMANDER_PATH%\Files\Lists\MarkerList\MarkerList.txt" ' любой файл для записи выделения '======================================================================== Count = WScript.Arguments.Count If Count < 3 Then MsgBox "Не хватает параметров!" & vbNewLine &_ "Должен быть минимум ТРИ параметра:" & vbNewLine &_ "пример1: %L 2 3" & vbNewLine &_ "пример2: 0 1 3" , vbOKOnly &_ vbInformation, "Сохранение выделенного в файл" Wscript.Quit End If
Dim FSO, WSH, TextMarker Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = WScript.CreateObject("WScript.Shell") If Count > 3 Then Condition = WScript.Arguments(3) Cnt = WScript.Arguments(0) Select Case Cnt Case "0" Select Case Condition Case 1 RunTCMC("CM3302") Case 2 RunTCMC("CM3303") Case Else RunTCMC("CM523") End Select MarkerInText Case ">" WSH.SendKeys "+{END}" : ConditionMarker Case "<" WSH.SendKeys "+{HOME}" : ConditionMarker Case Else On Error Resume Next : TextMarker = FSO.OpenTextFile(Cnt, 1).ReadAll End Select
RunTCMC("CM2029") gPath = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") If Len(gPath) > 0 Then gPath = gPath & "\" : TextMarker = Replace(TextMarker, gPath , "", 1, -1, 1) End If
If Count > 2 Then N = CInt(WScript.Arguments(1)) : M = CInt(WScript.Arguments(2)) If N < 1 Or M < 1 Then WScript.Quit DataM = Split(TextMarker, vbNewLine) : TextMarker = "" If UBound(DataM) > N + 1 Then N = N - 1 For i = 0 To UBound(DataM) Step N + M + 1 On Error Resume Next For j = i To i + N TextMarker = TextMarker & DataM(j) & vbNewLine Next If i > UBound(DataM) Then Exit For Next End if End if
Set WSH = Nothing : Set FSO = Nothing : WScript.Quit Function GetPath(pPath) : GetPath = WSH.ExpandEnvironmentStrings(pPath) : End Function Sub RunTCMC(Param) : WSH.Exec(Chr(34) & TCMC & Chr(34) & Chr(32) & Chr(34) & Param & Chr(34)) : End Sub
Sub ConditionMarker Select Case Condition Case 1 WScript.Sleep 300 : RunTCMC("CM3305") Case 2 WScript.Sleep 300 : RunTCMC("CM3304") End Select MarkerInText End Sub
Sub MarkerInText WScript.Sleep 300 : RunTCMC("CM2018") : WScript.Sleep 1000 TextMarker = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") WScript.Sleep 200 End Sub
Дата: Воскресенье, 20.11.2011, 13:01 | Сообщение # 118
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
volodia_k, Спасибо за поддержку темы! Тема мне и самому нравится! Появится скорость инета - выложу ряд справок для тех кто хочет научится и любит читать Появится время надо подсобрать хорошие ссылки сайтов, где подобные вопросы рассматриваются В общем будем развиваться. Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Дата: Понедельник, 21.11.2011, 19:29 | Сообщение # 120
Генерал-полковник
Зареген: 05.01.2011
Всего сообщений: 765
Andrey_A, пользуюсь кнопкой. Очень удобно.
Code
TOTALCMD#BAR#DATA %COMMANDER_PATH%\scripts\Buffer_N.vbs "%p%O.txt" %COMMANDER_PATH%\install\Icons\ICONS_V8S.ico,39 Создать txt-файл с содержимым буфера обмена, с именем под курсором %COMMANDER_PATH%\scripts\
-1
Возможно ли создавать тестовый файл с именем из буфера?