Страница 1 из 2

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

Добавлено: Ср ноя 25, 2009 14:28
moroz90
Помогите,пожалуйста, с автоматизацией данной операции.
Требуется Переместить группу выделенных файлов в строго определенную папку. (Например Archiv)
В идеале - повесить на шорт кат. Или кнопку создать.

Добавлено: Ср ноя 25, 2009 16:05
Batya
Можно использовать этот скрипт.

Добавлено: Ср ноя 25, 2009 17:44
moroz90
Наверно можно...
А не мог ли "любезный джин" заточить данный скрипт под меня?
Папка назначения F:\Arhiv
PS ну не силен я в програмировании. гляжу в скрипт, вижу - фигу :oops:

Добавлено: Ср ноя 25, 2009 18:04
Batya
Зажав Shift, перетащить скрипт на панель TC.
Изменить получившуюся кнопку - указать параметры:
%L "F:\Arhiv"

Добавлено: Ср ноя 25, 2009 18:23
moroz90
спасибо, работает.
А можно еще немного дополнить?
Защитой от дурака.
Если курсор стоит на папке. Или , если курсор стоит на двух точках(выход из папки).
Что бы вываливалось какое либо сообщение.

И еще вопросик. Если папка в сети, \\Cdi\output133\, то почему то не работает :(

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

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

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

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

  Else
    MsgBox "Смотри, куда курсор ставишь!", vbExclamation, "Окосел?" '(c) Tol!k :)

Добавлено: Чт ноя 26, 2009 09:55
moroz90
Поменял.
Теперь, если курсор на папке, то - ОКОСЕЛ... :) появляется
а если на двух точках, то по прежнему окно с ошибкой "Индекс выходит за пределы диапазона"
И еще про сетевую папку ответь плиз. Как правильно настроить параметры(адрес папки) , если папка - сетевая.

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

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

ЗЫ
moroz90, почему бы просто внимательно не смотреть, что выделено?

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

Спасибо за помощь.

Добавлено: Чт ноя 26, 2009 11:03
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 попадет этот файл\папка.

Добавлено: Чт ноя 26, 2009 11:39
Tol!k
Не так. Гислер сделал т.о., что если в параметрах %L, а курсор на "..", то параметры вообще затираются все. Попробуй указать "?" в строке параметров и проверить этот случай.
А... Ну значит можно отследить это по полному отсутствию параметров.
А еще прикол - если выделить ".." и поставить курсор на невыделенный файл\папку, то в %L попадет этот файл\папка.
Бред.
Но объяснимо. Часто замечаю, как при нажатии кнопок снимается выделение с ".."
Если при этом курсор стоит на файле\папке, то именно он и отправится в параметры.
Но бред. Лучше бы в этом случае параметры вообще не отправлялись.

Добавлено: Чт ноя 26, 2009 11:57
sa
Batya писал(а):А еще прикол - если выделить ".." и поставить курсор на невыделенный файл\папку, то в %L попадет этот файл\папка.
Вопрос. Есть ли возможность средствами скрипта (можно с WSH Helper, но без использования параметров %L и т.п.) определить, есть ли на панели выделенные файлы\папки, в том числе и ".." ?

Добавлено: Чт ноя 26, 2009 12:10
Batya
sa писал(а):можно с WSH Helper
ReadMe.txt писал(а):-------------------------------
Макросы (готовые наборы команд)
-------------------------------

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

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

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

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

GetTrgPath - возвращает путь к целевой панели

Добавлено: Чт ноя 26, 2009 12:13
sa
Вся беда в том, что GetSrcSelectedFiles возвращает файл под курсором, даже, если ничего не выделено...

Добавлено: Чт ноя 26, 2009 12:28
Batya
sa писал(а):Вся беда в том, что GetSrcSelectedFiles возвращает файл под курсором, даже, если ничего не выделено...
%L тоже возвращает файл под курсором, даже, если ничего не выделено...