WSH + TCScript = мощное средство автоматизации TC!

Форум о самом популярном файловом менеджере Total Commander

Сообщение Egorus » Чт июл 08, 2004 10:29 am

2SAM
спасибо за помощь и поддержку, все что хотел сделал
с ФАРа практически полностью слез, правда сильно нехватает отображения скрытых шар и умной сортировки по группам
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->А почему _только_ ZIP ?<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
ну, как-то я больше ничего не пользую :) зипы с инета часто качаются, а свое я все раром пакую, даже не помню когда последний раз что-то необычное распаковывал.
Egorus
Ст. сержант
 
Сообщений: 38
Зарегистрирован: Чт июн 05, 2003 10:03 am
Пункты репутации: 0

Сообщение SAM » Пт июл 09, 2004 5:28 am

2Egorus
Скрытые шары - 2204 или $89C или cm_AdministerServer (команда меню ТС)
"умная сортировка по группам" - это как ?
Про ZIP я потому, что если делать распаковку средствами Тотала, то будет похрену какой архив - распакует ЛЮБОЙ - лишь бы плагин соответствующий был подключен.
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение Egorus » Пт июл 09, 2004 9:23 am

Умная сортировка, это когда мы выбираем сортировку по имени, но при этом сортировка идет с учетом шаблонов файлов. Например сначала архивы, потом исполнимые, потом текстовые, потом все остальные. Внутри каждой группы идет сортировка также по имени. В ФАРе и ДНе это существует уже очень давно, и это очень удобно. Господину Гислеру насколько я слышал об этом писали более года назад, на что он ответил что это интересно и все... :)
Egorus
Ст. сержант
 
Сообщений: 38
Зарегистрирован: Чт июн 05, 2003 10:03 am
Пункты репутации: 0

Сообщение Egorus » Пн июл 12, 2004 6:24 am

2SAM
<!--QuoteBegin-SAM+--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата (SAM)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Можно список и средствами Тотала получить (параметры "%F" или "%L" возвращают имя файла с таким списком).
Я таким макаром подрехтовал TC_DE.VBS и смог отказаться от замечательной утилы от TIR-а LST2MLT (кто не в курсе - она для того, чтобы с одного тычка в редактор кучу файлов грузить)
Получилось даже лучше. Все файлы грузятся в _свои_ редакторы<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Кинь если не жаль в трэд, для общего развития, мож. что новое узнаю.
Egorus
Ст. сержант
 
Сообщений: 38
Зарегистрирован: Чт июн 05, 2003 10:03 am
Пункты репутации: 0

Сообщение SAM » Пн июл 12, 2004 9:49 pm

2Egorus
Ничего нового. Все новое - позабытое старое Изображение
Код: выделить все
'  File:         TC_MLTFE.vbs
'  Description:  Total Commander Multi File Editor
'  Version:      1.0 beta
'  Author:       SAM (http://mozers.da.ru)
'  Comments:     Позволяет открыть (в связанном редакторе) одновременно несколько выделенных файлов.
'  Installation: Создайте в меню "Запуск" пункт:
'                Название: "Редактировать выделенные файлы"
'                Команда: "%COMMANDER_PATH%\AddOn\WSH\TC_MLTFE.vbs"
'                Параметры: %L
' _________________________________________________________

Option Explicit

Dim WshShell, objArgs, File, FSO
Dim sExt, sEditor, sFileName, sDefaultEditor, sDefaultEditorName, sListFileName, sEditFileName, sQ
Const ForReading = 1

sQ = Chr(34)
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

'Находим аргументы коммандной строки (т.е путь к файлу со списком)
Set objArgs = WScript.Arguments
If objArgs.Count < 1 Then WScript.Quit
sListFileName = objArgs(0)

'==========================================================================
Set File = FSO.OpenTextFile(sListFileName, ForReading, False)
'Читаем список и грузим все файлы в редактор
'   Скрипт грузит файлы по очереди, поэтому можно открыть одновременно файлы с различными расширениями и загрузить их в разные редакторы.
'   Правда, если несколько файлов будут грузится в один редактор, то он может открыть и несколько окон (тут все зависит от редактора)
'   Правильней было бы грузить весь список одновременно, преобразовав его к однострочному виду. Только как тогда обрабатывать разные расширения? Грузить все в один редактор?
Do While Not File.AtEndOfStream
   sEditFileName = File.ReadLine
   Call LoadEditor(sEditFileName)
Loop
WScript.Quit

'==========================================================================
Sub LoadEditor(sFileName)
'Загрузка файла в редактор

   'Выбор редактора в зависимости от расширения файла:
   sExt = FSO.GetExtensionName(sFileName)
   '------------------------------------------------------------------------
   Select Case UCase(sExt)
       Case "INI", "HTML", "HTM", "SHTML", "STM", "CSS"
           sEditor = "C:\Program Files\EditPlus 2\editplus.exe"
       Case "BAT", "CMD", "TXT", "NFO", "DIZ", "ION", "BBS"
           sEditor = "C:\Program Files\AkelPad\akelpad.exe"
       Case "ASM", "PAS", "PHP3", "PHP", "PL", "PM", "CGI", "POD", "SQL", "VB", "BAS", "FRM", "C", "CC", "CPP", "CXX", "CS", "H", "HH", "HPP", "HXX", "SMA", "CS", "RC", "RC2", "DLG", "PROPERTIES"
           sEditor = "C:\Program Files\SciTE\SciTE.exe"
       Case "VBS", "JS", "WSF", "WSH", "ASP"
           sEditor = "C:\Program Files\PrimalScript\PrimalScript.exe"
       Case "EXE", "DLL"
           sEditor = "E:\Program Files\PE Explorer\PEXPLORER.exe"
   End Select
   'Редактор для других (не заданных выше) расширений
   sDefaultEditorName = "EmEditor"
   sDefaultEditor = "C:\Program Files\EmEditor\emeditor.exe"
   '------------------------------------------------------------------------
   'Запуск выбранного редактора
   If sEditor <> "" Then
       If FSO.FileExists(sEditor) Then
           WshShell.Run sQ & sEditor & sQ & " " & sQ & sFileName & sQ, 1, False
       Else
           MsgBox "Файл " & sQ & sEditor & sQ & " отсутствует!", vbCritical, "Ошибка"
       End If
   Else
       WshShell.Run sQ & sDefaultEditor & sQ & " " & sQ & sFileName & sQ, 1, False
   End If
End Sub
Последний раз редактировалось SAM Пн июл 12, 2004 9:50 pm, всего редактировалось 1 раз.
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение Volniy » Чт июл 15, 2004 7:32 pm

Принесли вчера кучу дисков MP3 и все без плейлистов Изображение. Вот и я сварганил скриптик. Решил поделиться Изображение . Весьма показателен в плане лаконичности Изображение
Код: выделить все
'======================================================================

'  File:         MakePlayLists.vbs
'  Description:  Создает M3U (плейлисты WinAMP) в текущей и в каждой
'                в нее вложенной папке, если найдет в них файлы MP3 или WMA  
'  Installation: Создайте кнопку на панели TC
'                Команда: "диск:\путь\к\файлу\MakePlayLists.vbs"
'                Параметры: "%P"     [Внимание! - в кавычках!]


'(c) 2004, Volniy

Option Explicit
  Dim Fso, Cnt, CntF
  Set Fso = CreateObject("Scripting.FileSystemObject")

  If Fso.FolderExists(WScript.Arguments(0)) = False Then
     MsgBox "Указана неверная директория!", vbCritical, "Ошибка"
  Else
     Call ScanFolderForMP3(Fso.GetFolder(WScript.Arguments(0)))
     MsgBox Cnt & " плейлист(а,ов) с " & CntF &  " файлами создано.", vbInformation, "Завершено"
  End If

  Set Fso = Nothing
  WScript.Quit

Sub ScanFolderForMP3(curFolder)
  Dim SF
  For Each SF In curFolder.SubFolders
     ScanFolderForMP3 SF
  Next
  Call MakeM3U(curFolder)
End Sub

Sub MakeM3U(curFolder)
  Dim F, List, m3uFile, fExt
  'On Error Resume Next
  For Each F In curFolder.Files
     fExt = UCase(Fso.GetExtensionName(F.Name))
     If fExt = "MP3" Or fExt = "WMA" Then
         List = List & F.Name & vbCrLf : CntF = CntF + 1
     End If
  Next
  If Len(List) Then
    Set F = curFolder.CreateTextFile(curFolder.Name & ".m3u", True)
        F.Write List: F.Close: Cnt = Cnt + 1
  End If
End Sub

'======================================================================

ВАЖНО: всегда передавайте %P в кавычках, ибо Тотал Коммандер их забывает ставить для путей с пробелами и выходит полная лажа...
Последний раз редактировалось Volniy Вт июл 27, 2004 5:43 am, всего редактировалось 1 раз.
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Egorus » Сб июл 17, 2004 7:20 am

2SAM
можно ли каким то образом заставить работать твой скрипт TC_MLTFE.vbs в архивах?
Egorus
Ст. сержант
 
Сообщений: 38
Зарегистрирован: Чт июн 05, 2003 10:03 am
Пункты репутации: 0

Сообщение Ti-Mac » Пт июл 23, 2004 9:12 am

Вот написал скрипт, но он не работает :) Исправьте новичка
Идея такая: все файлы в папке Downloads сортируются по папкам с датами их создания. Например файл создан 12.03.2004, -> создаётся папка с именем 12.03.2004 и туда перемещается этот файл
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
DoIt ("D:\Downloads\")
MsgBox "Файлы в папке Downloads отсортированы по датам!", vbInformation
Set fso = Nothing
WScript.Quit

Sub DoIt(Folder)
Dim F, CurFile, DC
For Each F In Folder.Files
CurFile = FSO.GetFile(f.Name)
DC = CurFile.DateCreated
If Not FSO.FolderExists(Folder + Cstr(DC)) Then FSO.CreateFolder(Folder + Cstr(DC))
Curfile.move (Folder + Cstr(DC))
Set F = Nothing
Set CurFile = Nothing
Next
End Sub <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->

Так вот пишет на строке 17 символ первый: требуется объект Folder :(

ps Как в WSH проверить наличие ключа в реестре?
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение Ti-Mac » Пт июл 23, 2004 11:06 am

Ладно вопрос один решился
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
Sub DoIt(Folder)
Dim F, CurFile, DC
set Dir=FSO.GetFolder(Folders)
For Each F In Dir.Files
Set CurFile = FSO.GetFile(f.Name)
DC = CurFile.DateCreated
If Not FSO.FolderExists(Dir.path + "\" + Cstr(DC)) Then FSO.CreateFolder(Dir.path + "\"+Cstr(DC))
Curfile.move (Dir.path + "\" + Cstr(DC)+"\")
Set F = Nothing
Set CurFile = Nothing
Next
End Sub
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Но вот после Then говорит что путь не найден :-(
Последний раз редактировалось Ti-Mac Пт июл 23, 2004 11:16 am, всего редактировалось 1 раз.
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение Volniy » Пт июл 23, 2004 2:44 pm

Ошибка: переменная типа Date включает в себя и время, а в формате времени часто присутствует запрещенный для имен папок символ двоеточие. Надо точнее указывать имя папки, например вот так (код полностью рабочий):
Код: выделить все
'=============================8<============================================
Option Explicit

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

DoIt ("D:\Downloads\")

MsgBox "Файлы в папке 'd:\Downloads' отсортированы по дате их создания", vbInformation

Set fso = Nothing
WScript.Quit

Sub DoIt(FolderPath)
 
  Dim F, Fol
  Dim NewPath, DC
 
  Set Fol = fso.GetFolder(FolderPath)
 
  For Each F In Fol.Files
     DC = F.DateCreated
     'DC = FormatDateTime(DC, vbShortDate)           ' 1) вариант
     DC = Day(DC) & "." & Month(DC) & "." & Year(DC) ' 2) вариант (более надежный)
     NewPath = fso.BuildPath(Fol.Path, DC)
     If fso.FolderExists(NewPath) = False Then
        Fol.SubFolders.Add DC
     End If
     F.Move NewPath & "\"
  Next
 
  Set Fol = Nothing

End Sub
'================================>8=========================================

Своих коопирайтов я не ставлю, а то скажут, что подписался под чужой идеей.
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение lef » Пт июл 23, 2004 6:12 pm

Выполняю скрипт:

Dim TCS, ff
Set TCS = CreateObject("TCSCRIPT.Helper")
ff=TCS.GetSelectedFiles'ff=TCS.GetSelectedFiles

в результате получаю в клипборде список выделенных файлов, хотя команды на копирование списка в клипборд я не давал, это баг или еще чего?
lef
Ефрейтор :)
 
Сообщений: 10
Зарегистрирован: Пт июл 23, 2004 5:23 pm
Пункты репутации: 0

Сообщение Ti-Mac » Пт июл 23, 2004 6:43 pm

А теперь с указанием расширений
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
<span style='font-size:8pt;line-height:100%'>
'  File:             DirMakeDate.vbs
'  Version:       1.0 beta
'  Description:  Все файлы данного каталога (без поддиректорий) сортируются '
'                      по папкам в зависимости от даты их создания
'  Installation:  Создайте запись в меню Start TC
'                     Команда: "диск:\путь к файлу\DirMakeDate.vbs"
'                     Установите нужную вам папку в переменную YourDir и типы
'                     файлов через запятую
'                     в переменную Ext (пробелы запрещены). Чтобы сортировать все
'                     файлы оставьте пустое значение
'© 2004, Ti-Mac

YourDir ="D:\Downloads\"
Ext = "zip,rar,htm,html,exe,rtf,txt,doc"

Dim Flag
Set fso = CreateObject("Scripting.FileSystemObject")

    Set Dir=FSO.GetFolder(YourDir)
    Flag = False
   
   If Ext <> "" then
       k = 1
       t = ""
       NewExt = ""
          Do Until k>Len(Ext)
          t = Mid(Ext,k,1)
          If t<>"," Then NewExt = NewExt + t
          IF t="," Then
          Call Sort (NewExt)
          NewExt = ""
          End If
          k = k + 1
          Loop

    Else
    Call Sort (Ext)
    End if

    If flag Then
        MsgBox "Файлы в папке "&YourDir&" отсортированы по датам!",  vbInformation
    Else MsgBox "В папке "&YourDir&" нет новых файлов для сортировки!",       vbInformation
    End If
 
Set fso = Nothing
WScript.Quit

Sub Sort (ext)
     For Each F In Dir.Files
        If Fso.GetExtensionName(F.Name) = ext or Ext = "" then
        DC = F.DateCreated
        DC = Year(DC) & "_" & Month(DC) & "_" & Day(DC)
        NewDir = Dir.path & "\" & DC & "\"
             If Not FSO.FolderExists(NewDir) Then FSO.CreateFolder(NewDir)
        If fso.fileexists(NewDir+f.name) then fso.DeleteFile(NewDir+f.name)
        f.move (NewDir)
        Flag = True
        end if
    Next
End Sub</span><!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Последний раз редактировалось Ti-Mac Пт июл 23, 2004 7:03 pm, всего редактировалось 1 раз.
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение Volniy » Пт июл 23, 2004 8:42 pm

<!--QuoteBegin-lef+Jul 23 2004, 21:12--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата (lef @ Jul 23 2004, 21:12)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->ff=TCS.GetSelectedFiles

в результате получаю в клипборде список выделенных файлов, хотя команды на копирование списка в клипборд я не давал, это баг или еще чего?<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->

Вроде и не баг, но и не фича Изображение Просто я пока не вижу иного способа получить список выделенных файлов, кроме как воспользоваться командами копирования этих имен в буфер обмена и вычитывания имен оттуда. А что, это как-то мешает? Подозреваю, что в это время в буфере уже хранилось нечто иное и при этом нужное, да?
Как тут уже не раз упоминалось, можно пойти другим путем и передавать в скрипт через командную строку (параметры %L, %l, %F, %f, %D, %d) файл со списком выделенных файлов, а потом его читать.
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Volniy » Пт июл 23, 2004 10:02 pm

2Ti-Mac
Предагаю более продвинутый вариант разборки расширений (привыкай пользоваться новыми функциями VB)
Код: выделить все
   If ext <> "" Then
     Allext = Split(ext, ",")
     For Each e In Allext
        Call Sort(Trim(e))  ' Trim разрешает пробелы в строке Ext
     Next
   Else
     Call Sort(ext)
   End If


А еще в Sort (ext) абсолютно не учтена ситуация (вполне реальная), когда расширения файлов будут иметь верхний регистр символов или даже смешанный Изображение

Это я все не к тому, чтобы "свою ученость показать", а чтобы подсказать более удобные и надежные ходы "новичку", ты ведь сам себя так назвал Изображение.

А вообще вышел очень удачный, по-моему, скрипт и который может быть приспособлен под разнообразные нужды.
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Ti-Mac » Сб июл 24, 2004 5:38 am

2Volniy
Да ты прикольнее написал, я про Сплит даже не знал, вот и извращался над строкой :)
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->А еще в Sort (ext) абсолютно не учтена ситуация (вполне реальная), когда расширения файлов будут иметь верхний регистр символов или даже смешанный<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Так Виндосу же всё равно.
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->А вообще вышел очень удачный, по-моему, скрипт и который может быть приспособлен под разнообразные нужды.<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Особенно если пользуешься закачками через Оперу. Просто "собака" кидает всё в одну папку, а DM иногда лень включать :)

<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
'  File:            DirMakeDate.vbs
'  Version:      1.1 beta
'  Description:  Все файлы данного каталога (без поддиректорий) сортируются
'                    по папкам в зависимости от даты их создания
'  Installation:  Создайте запись в меню Start TC
'                    Команда: "диск:\путь к файлу\DirMakeDate.vbs"
'                    Установите нужную вам папку в переменную YourDir и типы
'                    файлов через запятую в переменную Ext. Чтобы сортировать
'                    все файлы оставьте пустое значение
'  © 2004, Ti-Mac
'  Особая благодарность Volniy

YourDir ="D:\Downloads\"
Ext = "zip,rar,htm,html,exe,rtf,txt,doc"

Dim Flag
Set fso = CreateObject("Scripting.FileSystemObject")

    Set Dir=FSO.GetFolder(YourDir)
    Flag = False
   
  If ext <> "" Then
    Allext = Split(ext, ",")
    For Each e In Allext
        Call Sort(Trim(e))
    Next
  Else
    Call Sort(ext)
  End If

    If flag Then
        MsgBox "Файлы в папке "&YourDir&" отсортированы по датам!",  vbInformation
    Else MsgBox "В папке "&YourDir&" нет новых файлов для сортировки!",      vbInformation
    End If
 
Set fso = Nothing
WScript.Quit


Sub Sort (ext)
    For Each F In Dir.Files
        If Fso.GetExtensionName(F.Name) = ext or Ext = "" then
        DC = F.DateCreated
        DC = Year(DC) & "_" & Month(DC) & "_" & Day(DC)
        NewDir = Dir.path & "\" & DC & "\"
            If Not FSO.FolderExists(NewDir) Then FSO.CreateFolder(NewDir)
        If fso.fileexists(NewDir+f.name) then fso.DeleteFile(NewDir+f.name)
        f.move (NewDir)
        Flag = True
        end if
    Next
End Sub
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Пред.След.

Вернуться в Total Commander

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

cron