Перемещение группы файлов одним кликом

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

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

moroz90
Сообщения: 36
Зарегистрирован: Чт окт 22, 2009 13:49

Перемещение группы файлов одним кликом

Сообщение moroz90 »

Помогите,пожалуйста, с автоматизацией данной операции.
Требуется Переместить группу выделенных файлов в строго определенную папку. (Например Archiv)
В идеале - повесить на шорт кат. Или кнопку создать.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Можно использовать этот скрипт.
Нет, я не сплю. Я просто медленно моргаю.
moroz90
Сообщения: 36
Зарегистрирован: Чт окт 22, 2009 13:49

Сообщение moroz90 »

Наверно можно...
А не мог ли "любезный джин" заточить данный скрипт под меня?
Папка назначения F:\Arhiv
PS ну не силен я в програмировании. гляжу в скрипт, вижу - фигу :oops:
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Зажав Shift, перетащить скрипт на панель TC.
Изменить получившуюся кнопку - указать параметры:
%L "F:\Arhiv"
Нет, я не сплю. Я просто медленно моргаю.
moroz90
Сообщения: 36
Зарегистрирован: Чт окт 22, 2009 13:49

Сообщение moroz90 »

спасибо, работает.
А можно еще немного дополнить?
Защитой от дурака.
Если курсор стоит на папке. Или , если курсор стоит на двух точках(выход из папки).
Что бы вываливалось какое либо сообщение.

И еще вопросик. Если папка в сети, \\Cdi\output133\, то почему то не работает :(
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

moroz90 писал(а):Если курсор стоит на папке. Или , если курсор стоит на двух точках(выход из папки).
Что бы вываливалось какое либо сообщение.
Замени строки

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

  ElseIf FSO.FolderExists(Rln) Then 
    FSO.MoveFolder Rln, WScript.Arguments(1) 
на это

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

  Else
    MsgBox "Смотри, куда курсор ставишь!", vbExclamation, "Окосел?" '(c) Tol!k :)
Нет, я не сплю. Я просто медленно моргаю.
moroz90
Сообщения: 36
Зарегистрирован: Чт окт 22, 2009 13:49

Сообщение moroz90 »

Поменял.
Теперь, если курсор на папке, то - ОКОСЕЛ... :) появляется
а если на двух точках, то по прежнему окно с ошибкой "Индекс выходит за пределы диапазона"
И еще про сетевую папку ответь плиз. Как правильно настроить параметры(адрес папки) , если папка - сетевая.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

moroz90 писал(а):а если на двух точках, то по прежнему...
".." TC не передаёт, так что о том, что курсор был установлен на "..", можно догадаться только косвенно.
//Столкнувшись с этим и пытаясь побороть, я тогда и разозлился на moroz'a :D
Проще всего поменять параметры местами, тогда отсутствие второго параметра будет означать, что курсор стоял на ".."

Если же кроме ".." выделено что-то ещё, то ни один скрипт никогда не узнает о существовании ".."

ЗЫ
moroz90, почему бы просто внимательно не смотреть, что выделено?
Последний раз редактировалось Tol!k Чт ноя 26, 2009 10:52, всего редактировалось 1 раз.
moroz90
Сообщения: 36
Зарегистрирован: Чт окт 22, 2009 13:49

Сообщение moroz90 »

ну ладно, раз .. "TC никуда не передаёт" , буду сам внимательнее.
А то с от вашей доброты совсем обленился :)
Раньше все делал стандартными способами и не кряхтел. А теперь, полазил по сайту да по форуму, столько всего!!! УХХ..

Спасибо за помощь.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

moroz90
Вообщем, примерно так:

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

'==========================================================================
' Перемещение выделенных файлов с соответствующими им (для *.html) папками
'
' Параметры вызова из TC:
' %L "%T"
'==========================================================================

Dim FSO, Fld, WSH, Rln, FileList, TargetDir
If WScript.Arguments.Count > 0 Then
  Set FSO   = CreateObject("Scripting.FileSystemObject")
  Set WSH   = CreateObject("WScript.Shell")
  FileList  = GetPath(WScript.Arguments(0))
  TargetDir = GetPath(WScript.Arguments(1)) & ""
Else
  MsgBox "Смотри, куда курсор ставишь!", vbExclamation, "Окосел?" '(c) Tol!k :)
  Quit
End If

For Each Rln In Split(FSO.OpenTextFile(FileList).ReadAll, vbNewLine)
  If Rln <> "" Then
    Rln = GetPath(Rln)
    If FSO.FileExists(Rln) Then
      FSO.MoveFile Rln, TargetDir
      Fld = FSO.GetBaseName(Rln) & "_files"
      If FSO.FolderExists(Fld) Then
        MoveFolder Fld, TargetDir
      End If
    ElseIf FSO.FolderExists(Rln) Then
      MoveFolder Rln, TargetDir
    End If
  End If
Next

Quit

Function GetPath(pPath)
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function

Function MoveFolder(pSourcePath, pTargetPath)
  FSO.CopyFolder pSourcePath, pTargetPath
  FSO.DeleteFolder pSourcePath
End Function

Sub Quit
  Set WSH  = Nothing
  Set FSO  = Nothing
  WScript.Quit
End Sub
Папки тоже перемещает.
Tol!k писал(а):Проще всего поменять параметры местами, тогда отсутствие второго параметра будет означать, что курсор стоял на ".."
Не так. Гислер сделал т.о., что если в параметрах %L, а курсор на "..", то параметры вообще затираются все. Попробуй указать "?" в строке параметров и проверить этот случай.
А еще прикол - если выделить ".." и поставить курсор на невыделенный файл\папку, то в %L попадет этот файл\папка.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Не так. Гислер сделал т.о., что если в параметрах %L, а курсор на "..", то параметры вообще затираются все. Попробуй указать "?" в строке параметров и проверить этот случай.
А... Ну значит можно отследить это по полному отсутствию параметров.
А еще прикол - если выделить ".." и поставить курсор на невыделенный файл\папку, то в %L попадет этот файл\папка.
Бред.
Но объяснимо. Часто замечаю, как при нажатии кнопок снимается выделение с ".."
Если при этом курсор стоит на файле\папке, то именно он и отправится в параметры.
Но бред. Лучше бы в этом случае параметры вообще не отправлялись.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Batya писал(а):А еще прикол - если выделить ".." и поставить курсор на невыделенный файл\папку, то в %L попадет этот файл\папка.
Вопрос. Есть ли возможность средствами скрипта (можно с WSH Helper, но без использования параметров %L и т.п.) определить, есть ли на панели выделенные файлы\папки, в том числе и ".." ?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

sa писал(а):можно с WSH Helper
ReadMe.txt писал(а):-------------------------------
Макросы (готовые наборы команд)
-------------------------------

Внимание! На данный момент макросы используют команды,
связанные с буфером обмена и могут удалять нетекстовое
содержимое в нем (с текстом вроде уже проблем нет)

GetSrcSelectedFiles [True, если нужен полный путь]
возвращает массив имен выделенных файлов в панели-источнике.

GetTrgSelectedFiles [True, если нужен полный путь]
возвращает массив имен файлов, выделенных в целевой панели.

GetSrcPath - возвращает путь к панели-источнику

GetTrgPath - возвращает путь к целевой панели
Нет, я не сплю. Я просто медленно моргаю.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Вся беда в том, что GetSrcSelectedFiles возвращает файл под курсором, даже, если ничего не выделено...
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

sa писал(а):Вся беда в том, что GetSrcSelectedFiles возвращает файл под курсором, даже, если ничего не выделено...
%L тоже возвращает файл под курсором, даже, если ничего не выделено...
Нет, я не сплю. Я просто медленно моргаю.
Ответить