Script Request

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

Avada
Спасибо, не надо. Кажется TCCP вполне подошел. Да, и кажется, "не в то окно" ? :)
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Serge Yolkin
Да, не в ту тему попало. Исправил.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Надоело постоянно отключать фильтр по Ctrl+F10, решил написать скрипт:

Код: Выделить всё

' Переключение между двумя фильтрами
' Параметры: %P%N %T%M %X%P%N %T%M%Z ">Имя_Шаблона1" ">Имя_Шаблона2" "em_ИмяКоманды1" "em_ИмяКоманды2"
' Необходима регистрация "Script helper ActiveX for TC"
' Автор - Flasher ©
'=================================
With CreateObject("TCScript.Helper")
 If WScript.Arguments(0)=WScript.Arguments(1) Then
 WScript.Quit
  ElseIf WScript.Arguments(0)=WScript.Arguments(2) And _
   .INIRead(.MainINI, "left", "userspec")=WScript.Arguments(4) Or _
   WScript.Arguments(0)=WScript.Arguments(3) And _
   .INIRead(.MainINI, "right", "userspec")=WScript.Arguments(4) Then
   .UserCmd WScript.Arguments(7)
  ElseIf WScript.Arguments(0)=WScript.Arguments(2) And _
   .INIRead(.MainINI, "left", "userspec")=WScript.Arguments(5) Or _
   WScript.Arguments(0)=WScript.Arguments(3) And _
   .INIRead(.MainINI, "right", "userspec")=WScript.Arguments(5) Then
   .UserCmd WScript.Arguments(6)
 Else
  WScript.Quit
 End If
End With
Скрипт требует наличия двух созданных пользовательских команд, в каждой из которых прописано имя шаблона следующим образом: cd >Имя_шаблона
Таким образом вы можете, например, по одной кнопке/клавише включать/отключать заданный фильтр, предварительно создав команду отключения. Делается это просто: в диалоге поиска в поле "Искать файлы" пишем: *.* , переходим на вкладку /Шаблоны/ и жмём кнопку [Сохранить], пишем подходящее имя "Все файлы" - ОК. Потом в параметрах кнопки/команды вместо Имя_Шаблона2 пишем Все файлы, а вместо ИмяКоманды2, например, SrcAllFiles. Соответственно, в команде em_SrcAllFiles в поле "Команда" должно быть прописано: cd >Все файлы. По этой же аналогии разбираемся с реверсивной командой и шаблоном.
Естественно, параметры позволяют переключаться и между 2-мя любыми другими шаблонами фильтров.
redds
Сообщения: 1
Зарегистрирован: Ср май 18, 2011 18:58

Сообщение redds »

есть ли скрипт на ТС чтобы при разрыве связи при заливке на фтп, связь восстанавливалась без моего вмешательства и продолжалась закачка?

[mod="CaptainFlint"]Нарушение п. 9 правил. Сообщение перенесено из ветки Windows Script Host.[/mod]
BezDNaU
Сообщения: 65
Зарегистрирован: Сб май 31, 2008 10:56

Сообщение BezDNaU »

Есть такая команда: fsutil file createnew <имя файла, включая путь к нему> <размер в байтах> - она создает файл определенного размера в определенном месте.
Собственно вопрос: в противоположной панели создать копии выделенных файлов, заполненые нулями с размерами = исходным.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

BezDNaU
Используй этот скрипт, где вместо

Код: Выделить всё

    WSH.Run "fsutil file createnew """ & Target & FSO.GetFile(Selected).Name & """ 0", 7, True
пишем

Код: Выделить всё

    WSH.Run "fsutil file createnew """ & Target & FSO.GetFile(Selected).Name & """ " & FSO.GetFile(Selected).Size, 7, True
а вместо

Код: Выделить всё

    WSH.Run "fsutil file createnew """ & Tar & FSO.GetFile(f).Name & """ 0", 7, True
пишем

Код: Выделить всё

    WSH.Run "fsutil file createnew """ & Tar & FSO.GetFile(f).Name & """ " & FSO.GetFile(f).Size, 7, True
Нет, я не сплю. Я просто медленно моргаю.
BezDNaU
Сообщения: 65
Зарегистрирован: Сб май 31, 2008 10:56

Сообщение BezDNaU »

Спасибо большое, работает!
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Код: Выделить всё

'===========================================
' Перемещение выделенных файлов и папок на уровень вверх
' с переходом в родительский каталог активной папки
' Параметры: %L <любой символ>
' второй параметр необязательный - если стоит, то переходить
'===========================================
With CreateObject("Scripting.FileSystemObject")
Set TempFile = .OpenTextFile(WScript.Arguments(0), 1)
Do While Not TempFile.AtEndOfStream
  N = TempFile.ReadLine
  If .FolderExists(N) Then
    Set F = .GetFolder(N)
    TargetPath = F.ParentFolder.ParentFolder
    If Not .FolderExists(TargetPath & "\" & .GetFolder(N).Name) Then
      .MoveFolder F, TargetPath & "\"
    Else
      F.Copy TargetPath & "\" & .GetFolder(N).Name & "_Copy"
      F.Delete
    End If
  End If
  If .FileExists(N) Then
    Set F = .GetFile(N)
    TargetPath = F.ParentFolder.ParentFolder
    If Not .FileExists(TargetPath & "\" & F.Name) Then
      .MoveFile F, TargetPath & "\"
    Else
      F.Copy TargetPath & "\" & .GetBaseName(N) &"_Copy." & .GetExtensionName(N)
      F.Delete
    End If
  End If
Loop
End With
If WScript.Arguments.Count>1 Then _
CreateObject("WScript.Shell").Exec("%COMMANDER_PATH%\Totalcmd.exe /O /S /L=""" & TargetPath & """")
Wscript.Quit
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Код: Выделить всё

'===========================================
' Перемещение содержимого выделенных папок в каталог
' активной панели с их последующим удалением
' Параметры: %L
'===========================================
With CreateObject("Scripting.FileSystemObject")
Set TempFile = .OpenTextFile(WScript.Arguments(0), 1)
Do While Not TempFile.AtEndOfStream
   N = TempFile.ReadLine
   If .FolderExists(N) Then
      Set FF = .GetFolder(N)
      For Each F In FF.SubFolders
        PD = F.ParentFolder.ParentFolder
        If Not .FolderExists(PD & "\" & F.Name) Then
          .MoveFolder F, PD & "\"
        Else
          F.Copy PD & "\" & F.Name & "_Copy"
          F.Delete
        End If
      Next
      For Each F In FF.Files
        PD = F.ParentFolder.ParentFolder
        If Not .FileExists(PD & "\" & F.Name) Then
         .MoveFile F, PD & "\"
        Else
          F.Copy PD & "\" & .GetBaseName(F) &"_Copy." & .GetExtensionName(F)
          F.Delete
        End If
      Next
      If FF.Size = 0 Then FF.Delete
   End If
Loop
End With
Wscript.Quit
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Иногда для просмотра DVD-фильмов/обучалок необходимо по-быстрому смонтировать папку, полученную, например, с торрент-трекера, на диск. Несколько месяцев назад сделать себе такой скрипт. Выложу, может, кому пригодится:

Код: Выделить всё

' Смонтировать папку под курсором на виртуальный диск
' Параметры: %V
'=====================================
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(WScript.Arguments(0)) Then
  Drives=Array("D:","E:","F:","G:","H:","I:","J:","K:","L:","M:", "N:","O:","P:","Q:","R:","S:","T:","U:","V:","W:","X:","Y:","Z:")
  Set Dict = CreateObject("Scripting.Dictionary")
  For Each Drive In FSO.Drives
    Dict.Add Trim(Drive), ""
  Next
  Set FSO = Nothing
  For Each D in Drives
    If Not Dict.Exists(D) Then
      CreateObject("WScript.Shell").Run "subst " & D & " """ & WScript.Arguments(0) & """", 0, True
      Set Dict = Nothing
      WScript.Quit
    End If
  Next
End If
Ну, и впридачу:

Код: Выделить всё

' Отмонтировать все папки
'========================
For Each D In CreateObject("Scripting.FileSystemObject").Drives
  CreateObject("WScript.Shell").Run "subst /d" & " " & D, 0, True
Next
WScript.Quit
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

А как в этом скрипте

Код: Выделить всё

'===========================================
' Перемещение выделенных файлов и папок на уровень вверх
' с переходом в родительский каталог активной папки
' Параметры: %L <любой символ>
' второй параметр необязательный - если стоит, то переходить
'=========================================== 
Осуществить Перемещение выделенных файлов и папок на противоположную панель (естественно без дополнительных окон-подтверждения и вопросов)?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Код: Выделить всё

TargetPath = F.ParentFolder.ParentFolder
в двух местах заменить на

Код: Выделить всё

TargetPath = WScript.Arguments(1)
Вторым параметром прописать "%T".
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Спасибо только этот совет подходит для второго скрипта

Код: Выделить всё

'===========================================
' Перемещение содержимого выделенных папок в каталог
' активной панели с их последующим удалением
' Параметры: %L
'=========================================== 
И при таком раскладе (%L "%T") совпадающие имена (файлов внутри папки) и (файлов снаружи папки) объединятся - то-есть если содержимое разное - то останется только один файл - а это не есть хорошо! А вобщем, интересует именно первый скрипт(Перемещение выделенных файлов и папок на противоположную панель с добавлением _copy при совпадении к имени (для папке и для файла)
в нем строки

Код: Выделить всё

PD = F.ParentFolder.ParentFolder
я не нашел.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Внимательно см. как написано.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Спасибо разобрался, только осталась проблема автообновления исходной панели(из которой происходит перемещение) - она автоматом перескакивает в ту-же панель куда и происходит перемещение.(символы в кнопке при таком варианте -не действуют). Можно это как-то убрать?
Ответить