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

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

Сообщение Black Dog » Чт июн 10, 2004 4:53 pm

<span style='font-size:12pt;line-height:100%'><span style='font-family:courier new'>On Jun 8 2004, 11:21 SAM wrote:

<span style='color:maroon'>S> Вместо "701" можно написать "cm_UserMenu1" (это все, при
S> условии, что наша команда - первая, если она вторая, то
S> и вставлять надо "cm_UserMenu2" ("702")... ну и т.д.)</span>

Вообще-то "ну и т.д." будет только до "cm_usermenu10", а вот дальше придется TOTALCMD.INC редактировать. Так что подход изначально увечный %).</span></span>
<span style='font-size:12pt;line-height:100%'><span style='font-family:courier new'>The Protoss do NOT run from their enemies.
It is here, that we shall make our stand.</span></span>
Black Dog
Сержант
 
Сообщений: 27
Зарегистрирован: Чт май 09, 2002 3:14 am
Откуда: Odessa city
Пункты репутации: 0

Сообщение Evgenych » Чт июн 10, 2004 6:50 pm

2Sam
На Shift-F4 можно повесить этот же самый скрипт

<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
Вообще-то "ну и т.д." будет только до "cm_usermenu10", а вот дальше придется TOTALCMD.INC редактировать. Так что подход изначально увечный
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
А в чем увечность?
Последний раз редактировалось Evgenych Чт июн 10, 2004 6:57 pm, всего редактировалось 1 раз.
Evgenych
Прапор
 
Сообщений: 66
Зарегистрирован: Пт июл 11, 2003 3:38 pm
Пункты репутации: 0

Сообщение SAM » Пт июн 11, 2004 12:13 pm

2Spine
Ты что, пытаешся в самом скрипте изменить реальный путь на путь с %COMMANDER_PATH% ? Надо пользовать ExpandEnvironmentStrings
Если ты про Настройку Программа-редактор, то строчка должна выглядеть приблизительно так:
"%COMMANDER_PATH%\AddOn\WSH\TC_DE.vbs" "%1"
2Black Dog
Согласен. Мое решение - не идеально. (Надо портить меню не слишком нужной там командой. Вставлять надо именно в начало, т.е. в первые 10 пунктов.) Ваши предложения, маэстро?
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение Spine » Пт июн 11, 2004 12:35 pm

именно в скрипте...
Spine
Лейтенант
 
Сообщений: 84
Зарегистрирован: Вс июл 06, 2003 6:22 am
Пункты репутации: 0

Сообщение Volniy » Вс июн 20, 2004 1:55 pm

Решил вот свои пять копеек вставить чтобы тему поднять выше Изображение
Простейший вариант рекурсивной обработки. Можно будет использовать как основу для других скриптов, требующих рекурсии. Скрипт не использует объект TCScript.
Скрипт удаляет пустые папки внутри текущей директории и во всех вложенных в нее. А если текущая будет корневой - во всем диске тогда. В параметрах кнопки для этого скрипта поставьте %P

======= DelEmtySubDirs.vbs =======

' ©2004, Volniy

Option Explicit
Dim fso
Dim StartFolder
Dim objArgs

Set objArgs = WScript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")

If objArgs.Count = 1 Then
' Текущая директория, получаем через %P в командной строке
StartFolder = objArgs(0)
Else
MsgBox "Должен быть один параметр!", vbCritical
WScript.Quit
End If

'Можно указать начальную папку и напрямую
'StartFolder = "D:\"

If fso.FolderExists(StartFolder) = False Then
MsgBox "Неверная директория!", vbCritical
WScript.Quit
End If

ScanFolder StartFolder

MsgBox "Пустые папки в '" & StartFolder & "' удалены!", vbInformation

Set fso = Nothing
Set objArgs = Nothing

WScript.Quit

Sub ScanFolder(FolderPath)
Dim curFolder
Dim FItem
Set curFolder = fso.GetFolder(FolderPath)
For Each FItem In curFolder.SubFolders
ScanFolder FItem.Path
Next
' Проверка на условие для удаления
If curFolder.SubFolders.Count = 0 And curFolder.Files.Count = 0 Then
curFolder.Delete
End If
Set curFolder =Nothing
End Sub
======= DelEmtySubDirs.vbs =======

PS Хоть бы кто мне раньше сказал, что есть такая штуковина как Total Commander Script Editor, я бы ни в жисть не назвал свою байду TCScript. Это ж надо было так народ запутать Изображение Следующую версию переименую...
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение SAM » Вс июн 20, 2004 6:53 pm

2Volniy
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Хоть бы кто мне раньше сказал, что есть такая штуковина как Total Commander Script Editor<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Байда называется Aezay TC Script Editor или AzScript :)
Так что...
Ждем новую версию :)))

All
Есть вопрос: Как прочитать текст HTML страницы в строковую переменную?
Пытаюсь так:
Код: выделить все
Set oIE = WScript.CreateObject("InternetExplorer.Application")
oIE.Navigate sPath & "index.html"
oIE.Visible = 1
sText = oIE.Document.Body.Text
MsgBox """" & sText & """"

Cтраницу с текстом открывает, а в MsgBox - пустая строка :(
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение StayAtHome » Вс июн 20, 2004 8:36 pm

2SAM
А зачем тебе ИЕ? Мож просто сохрани страницу на диск и открой как текстовый фаайл?
<span style='color:gray'>Жизнь -- это песня!</span>
<span style='font-family:Courier'>Life.exe /?</span>
StayAtHome
Подполковник
 
Сообщений: 710
Зарегистрирован: Вс фев 09, 2003 11:30 pm
Откуда: Украина
Пункты репутации: 0

Сообщение eduha » Пн июн 21, 2004 1:54 am

2SAM
Вместо oIE.Document.Body.Text напиши oIE.Document.Body.innerText, если хочешь получить только текст, или oIE.Document.Body.innerHTML, если нужен html-код
<span style='color:blue'>Мэджик пипл, вуду пипл</span>
eduha
Капитан
 
Сообщений: 233
Зарегистрирован: Пн авг 11, 2003 4:39 pm
Откуда: Караганда / Казахстан
Пункты репутации: 0

Сообщение SAM » Пн июн 21, 2004 6:15 am

2eduha
СПАСИБО, дорогой! Все ОК!

2All
Вот еще один забавный скрипт, так же использующий рекурсию, для удаления всякого мусора (временных файлов и пр.) на дисках.
<a href='http://total.altruistic.ru/wsh/del_tmp.zip' target='_blank'>http://total.altruistic.ru/wsh/del_tmp.zip</a>
Думаю, что добавить в него функцию анализа командной строки (чтобы можно было чистить не все, а только текущий каталог, выбранный в Тотале, сможете сами :)
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение Egorus » Сб июл 03, 2004 7:07 pm

Здрастсвуйте товарищи.
Сел вот сегодня за изучение скриптов, начал со скрипта SAM TC_DE.vbs, решил под свои нужды сделать, никак мне не хватает таких функций как распаковка в текущую папку и распаковка в папку с названием файла. Задача поставлена начал копать, вроде все сделал, но вот несколько коряво как мне кажется
1. fso.GetBaseName(sCmdKey) возвращает короткие имена (не нашел в чем косяк и использовал GetSelectedFiles)
2. На каждую переменную окружения как я понял, нужно создавать отдельную строчку и потом использовать в путях редакторов:
Код: выделить все
tcp = wsh.ExpandEnvironmentStrings("%COMMANDER_PATH%")
pf = wsh.ExpandEnvironmentStrings("%PROGRAMFILES%")
sdp = wsh.ExpandEnvironmentStrings("%SYSTEMDRIVE%")


3. Для того чтобы нормально распаковывалось пришлость ввести 2 параметра
Код: выделить все
   Case "RAR"
       sEditor = pf & "\WinRar\winrar.exe"
       sParam1 = " x"
       sParam2 = fso.GetBaseName(TCS.GetSelectedFiles) & "\"

Код: выделить все
       WshShell.Run sQ & sEditor & sQ & sParam1 & sQ & " " & sQ & sCmdKey & sQ & sParam2, 1, true

Но теперь возник косяк что остальные редакторы запускаются но пишут что ошибка открытия файла, видимо параметры мешаются хотя я их и зануляю, а как условия делать я еще не разобрался.
Посоветуйте как решить траблы.
Последний раз редактировалось Egorus Сб июл 03, 2004 7:12 pm, всего редактировалось 1 раз.
Egorus
Ст. сержант
 
Сообщений: 38
Зарегистрирован: Чт июн 05, 2003 10:03 am
Пункты репутации: 0

Сообщение Evgenych » Вс июл 04, 2004 6:18 am

Например, можно вместо
Код: выделить все
WshShell.Run sQ & sEditor & sQ & sParam1 & sQ & " " & sQ & sCmdKey & sQ & sParam2, 1, true

сделать так
Код: выделить все
cmdline = sQ & sEditor & sQ & sParam1 & sQ & " " & sQ & sCmdKey & sQ & sParam2
MsgBox cmdline
WshShell.Run cmdline, 1, true

чтобы лучше определять в чем траблы :-)
Evgenych
Прапор
 
Сообщений: 66
Зарегистрирован: Пт июл 11, 2003 3:38 pm
Пункты репутации: 0

Сообщение Parcan » Вс июл 04, 2004 8:19 am

2Egorus
<!--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-->
помоему нажав на архиве Alt+F9 и выбрав галочку распаковывать каждый архив в папку с его именем получится как раз то, что тебе нужно.
<span style='color:gray'><span style='font-size:8pt;line-height:100%'><span style='font-family:Courier'>мастер пера и виртуоз клавиатуры</span></span></span>
Parcan
Лейтенант
 
Сообщений: 104
Зарегистрирован: Вт окт 14, 2003 11:08 am
Откуда: Владимир
Пункты репутации: 0

Сообщение SAM » Вс июл 04, 2004 3:29 pm

2Parcan
Абсолютно правильно. А в текущую - еще проще (Alt+F6, Backspace, Enter).
Ну если человеку очень хочется распаковывать в папку с именем архива с одной кнопки (в данном случае - с F4, хотя я бы оформил это дело отдельно...), то и это можно:
Код: выделить все
Case "RAR"
   sEditor = sQ & "c:\Program Files\WinRAR\WinRAR.exe" & sQ & " x " _
   & sQ & sCmdKey & sQ & " " & sQ & fso.GetBaseName(sCmdKey) & "\" & sQ
   WshShell.Run sEditor, 1, true
   WScript.Quit

Все работает (с длинными именами - то же). Только определение
Код: выделить все
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

надо поднять повыше.
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение Egorus » Ср июл 07, 2004 7:56 pm

2Evgenych
пасиб за cmdline, действительн полезно
2SAM
я тоже в конце концов оформил отдельно, а fso.GetBaseName(sCmdKey) длинные имена все равно не дает

<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
Dim sCmdKey, sQ, TCS
sQ = Chr(34)
Set TCS = CreateObject("TCSCRIPT.Helper")

'Находим аргументы коммандной строки
sCmdKey = WScript.Arguments(0)

'Разрешаем использовать переменные окружение
Dim WshShell, tcp, pfp, sdp
Set WshShell = WScript.CreateObject ("WScript.Shell")
tcp = WshShell.ExpandEnvironmentStrings("%COMMANDER_PATH%")
pfp = WshShell.ExpandEnvironmentStrings("%PROGRAMFILES%")
sdp = WshShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%")

Dim fso, sExt, sPacker, sEditor, sParam1, sParam2, sDefaultEditor, sDefaultEditorName
Set fso = CreateObject("Scripting.FileSystemObject")
sExt = fso.GetExtensionName(sCmdKey)

'Выбор программы в зависимости от расширения файла:
'------------------------------------------------------------------------
Select Case UCase(sExt)
    Case "RAR"
        sPacker = pfp & "\WinRar\winrar.exe"
        sParam1 = " x -av -y -kb -- "
        sParam2 = fso.GetBaseName(TCS.GetSelectedFiles) & "\"
    Case "INI", "HTML", "HTM", "SHTML", "STM", "CSS"
        sEditor = tcp & "\Plugins\SynPlus\SPlusEditStart.exe"
End Select
'Редактор для других (не заданных выше) расширений
sDefaultEditorName = "AkelPad"
sDefaultEditor = "%COMMANDER_PATH%\Plugins\akelpad.exe"
'------------------------------------------------------------------------

'Запуск выбранного архиватора
If sPacker <> "" Then
    If fso.FileExists(sPacker) Then
        WshShell.Run sQ & sPacker & sQ & sParam1 & sQ & sCmdKey & sQ & " " & sQ & sParam2 & sQ, 1, true
    WScript.Quit
    End If
End If

'Запуск выбранного редактора
If sEditor <> "" Then
    If fso.FileExists(sEditor) Then
        WshShell.Run sQ & sEditor & sQ & " " & sQ & sCmdKey & sQ, 1, true
    Else
        MsgBox "Файл " & sQ & sEditor & sQ & " отсутствует!", vbCritical, "Ошибка"
    End If
Else
WshShell.Run sQ & sDefaultEditor & sQ & " " & sQ & sCmdKey & sQ, 1, true
End If

Set fso = Nothing
Set WshShell = Nothing
WScript.Quit

'Сделать условие если виндового архиватора нет, использовать консольный
'Сделать распаковку зипов встроенными средставми Totala (TC Script)
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Добавлено:
И сразу в догонку вопрос, как заставить GetSelectedFiles возвращать список выделенных файлов в текущей панели с полными путями (в ReadMe.txt вроде заявлена такая возможность)
Egorus
Ст. сержант
 
Сообщений: 38
Зарегистрирован: Чт июн 05, 2003 10:03 am
Пункты репутации: 0

Сообщение SAM » Чт июл 08, 2004 9:55 am

<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->'Сделать распаковку зипов встроенными средставми Totala (TC Script)<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
А почему _только_ ZIP ?
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->как заставить GetSelectedFiles возвращать список выделенных файлов в текущей панели с полными путями<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
MsgBox TCS.GetSelectedFiles(True)

Можно список и средствами Тотала получить (параметры "%F" или "%L" возвращают имя файла с таким списком).
Я таким макаром подрехтовал TC_DE.VBS и смог отказаться от замечательной утилы от TIR-а LST2MLT (кто не в курсе - она для того, чтобы с одного тычка в редактор кучу файлов грузить)
Получилось даже лучше. Все файлы грузятся в _свои_ редакторы Изображение
Последний раз редактировалось SAM Чт июл 08, 2004 9:57 am, всего редактировалось 1 раз.
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Пред.След.

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

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

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

cron