Страница 18 из 25

Добавлено: Ср дек 06, 2017 15:09
ingerard
sa
Мне глубину менять приходится редко, я прописал в настройках какая мне надо и все.

p.s. только что попробовал нажать S+F5 и сразу же Win, и окно с выбором глубины появилось, без сложностей сразу срабатывает, так что вариант с выбором есть. :D

Добавлено: Ср дек 06, 2017 15:16
sa
ingerard писал(а):попробовал нажать S+F5 и сразу же Win
Тоже вариант!

Добавлено: Ср дек 06, 2017 17:56
MVV
ingerard,
А копирование откуда делается? Если из панели результатов поиска, то диалог в любом случае будет показан, т.к. там неизвестна папка, от которой уровни отсчитывать, в отличие от копирования из плоского режима, где папка известна. В Readme об этом сказано:
Readme.txt писал(а):При копировании из панели результатов поиска (если не задан параметр DefaultCopyLevel) диалог показывается всегда, в остальных случаях - в зависимости от настроек модуля.

Добавлено: Ср дек 06, 2017 22:37
ingerard
MVV
Да без всяких режимов только что попробовал, отключил в настройках CopyTree окно выбора глубины через Win, вызываю архивацию через Alt+F5, зажимаю кнопку Win и окно все равно выскакивает.

Добавлено: Чт дек 07, 2017 09:57
MVV
У меня ничего не выскакивает: выделяю файл в обычной панели, жму Alt+F5, жму ОК - файл молча скопирован. В настройках три верхних галки точно сняты?

Добавлено: Чт дек 07, 2017 10:15
sa
MVV писал(а):жму ОК
Речь о случае, когда помимо OK нажата клавиша Win. Как здесь.

Добавлено: Чт дек 07, 2017 10:31
Flasher
Было бы странно, если бы он этого не знал, коли о баге в данном контексте и сообщалось.

ingerard
Вообще я изначально предполагал, что окно глубины таки требуется, иначе можно было бы сразу говорить о чём-то вроде этого:
[cut]

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

'••••••••••••••••••••••••••••••••• VBS •••••••••••••••••••••••••••••••••
' Копирование/перемещение по указанному пути выбранных в активной панели
' объектов (с сохранением относительных путей в режиме без подкаталогов)

' Параметры: %WL "%P" "<путь получателя>" <copy/move>

' Ключи:
' /с:[+/-]<число> — контроль глубины вложенности выбранных объектов
'   a) Если перед числом +, добавляются папки справа пути источника.
'   б) Если перед числом -, папки исключается слева относител. пути.
'   в) Если знака нет, папки исключаются слева общего пути источника.
' /s:<секунд> — минимальное число секунд для оповещения об окончании
' /d — удалять опустевшие после перемещения файлов каталоги 

' Примеры:   %WL "%P" "%T" copy /c:2 /d
'            %WL "%P" D:\NewFolder copy /s:20
'            %WL "%P" "С:\New Folder" move /s:20 /с:-3
'••••••••••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © ••••

Option Explicit : Dim T : T = Timer
Dim Lst, IPath, OPath, Act, C, S, D, Ln, Disk, Del, RExp, Max, Min
Dim RPath, Del2, TF, F, PF, Fd,  FN, BN, Ext, i, TFile, FType, Sec

With WSH.Arguments
  If .Count = 0 Then WSH.Quit: End If : Lst = .Item(0)
  IPath = .Item(1) : OPath = .Item(2) : Act = .Item(3)
  D = Eval(LCase(Act) = "move" And .Named.Exists("d"))
  C = .Named("c") : S = .Named("s")
End With

With CreateObject("Scripting.FileSystemObject")
  If Not (.FolderExists(IPath) Or .FolderExists(OPath)) Or (C = "" And _
  StrComp(.BuildPath(IPath,"\"), .BuildPath(OPath,"\"), 1) = 0) Then WSH.Quit
  Set Disk = CreateObject("Shell.Application").NameSpace(Left(OPath, 2))
  If C = "0" Then OPath = .BuildPath(OPath, Replace(IPath, ":", ""))
  If StrComp(Left(IPath, 1), Left(OPath, 1), 1) <> 0 Then _
  If LCase(Act) = "move" Then Act = "Copy" : Del = " : .Delete"
  Set RExp = New RegExp : Ln = Len(IPath)
  If Right(IPath, 1) = "\" Then Max = 1 Else Ln = Ln + 1
  If C > 0 And IsNumeric(C) Then
    Max = UBound(Split(IPath, "\")) - Max + 1
    If CInt(C) > Max Then
      If Left(C, 1) = "+" Then C = Max Else C = 0
    ElseIf Left(C, 1) <> "+" Then C = Max - C End If
    RExp.Pattern = "((\\[^\\]+){" & CInt(C) & "})\\?$"
    OPath = .BuildPath(OPath, Replace(RExp.Execute(_
            "\" & IPath)(0).SubMatches(0), ":", ""))
  End If : Set TF = .OpenTextFile(Lst,,,-1)
  Do : F = TF.ReadLine : PF = .GetParentFolderName(F)
    If Right(F, 1) = "\" Then F = Left(F, Len(F) - 1)
    RPath = Mid(PF, Ln) : Del2 = ""
    If C < 0 Then
      Max = UBound(Split(RPath, "\")) + 1 : Min = Abs(C)
      If Min > Max Then Min = 0 Else Min = Max - Min
      RExp.Pattern = "(\\[^\\]+){" & Min & "}$"
      RPath = RExp.Execute(RPath)(0)
    End If
    If IPath = "" Then Fd = OPath Else _
    Fd = .BuildPath(OPath, RPath) : Disk.NewFolder Mid(Fd, 4)
    FN = .GetFileName(F) : BN = .GetBaseName(F) : i = 0
    Ext = .GetExtensionName(F) : If Len(Ext) Then Ext = "." & Ext
    While .FileExists(Fd & "\" & FN) Or .FolderExists(Fd & "\" & FN)
      i = i + 1 : FN = BN & " (" & i & ")" & Ext
    Wend : If .FileExists(F) Then FType = "File" Else FType = "Folder"
    If Len(Del) Then Del2 = FType & " F, 1"
    Execute "." & Act & FType & " F, Fd & ""\"" & FN" & Del & Del2
    If D And Right(PF, 1) <> "\" Then
      Do : If .GetFolder(PF).Size = 0 Then .DeleteFolder PF, 1
        PF = .GetParentFolderName(PF)
      Loop Until IPath = .BuildPath(PF, "\")
    End If
  Loop Until TF.AtEndOfStream : TF.Close
End With : CreateObject("WScript.Shell").SendKeys "^r"
Sec = Timer - T

If S > 0 And CSng(S) <= Sec Then
  If Sec < 60 Then Sec = 1.4 Else Sec = ""
  If LCase(Act) = "copy" Then Act = " " &_
  "Копирование " Else Act = " Перемещение "
  CreateObject("WScript.Shell").Popup Space(7) &_
  "Выполнено!", Sec, Act & "выбранного      ", 4160
End If
[/cut]

Добавлено: Чт дек 07, 2017 12:09
MVV
sa писал(а):
MVV писал(а):жму ОК
Речь о случае, когда помимо OK нажата клавиша Win. Как здесь.
А, блин, только сейчас понял, в чём проблема, никто толком и не объяснил, что для воспроизведения бага кнопка Win обязательна. Да, подтверждаю, что диалог показывается с Win, даже если опция отключена.

Добавлено: Чт дек 07, 2017 12:13
Flasher
MVV писал(а):никто толком и не объяснил, что для воспроизведения бага кнопка Win обязательна
Шутишь? А я с каким ключём к тебе обратился? И далее писал:
Flasher писал(а):При удержании Win диалог выбора всё равно появляется.
+ См. самый верх предыдущей страницы.

Добавлено: Чт дек 07, 2017 12:15
MVV
У тебя на скриншоте стояла галка "Показывать диалог каждый раз", я подумал, что проблема в этом.

Добавлено: Чт дек 07, 2017 12:18
Flasher
И я на это ответил.

Добавлено: Чт дек 07, 2017 13:05
sa
Спорить не о чем: описание бага можно использовать как образец. :)

Добавлено: Чт дек 07, 2017 15:01
MVV
Поправил косяк с опцией, также убрал пустой элемент в списке при копировании каталога, и подкорректировал подсчёт уровней в разных случаях.

CopyTree 1.3.0.320

sa писал(а):Спорить не о чем: описание бага можно использовать как образец. :)
По-любому! :lol:

Добавлено: Чт дек 07, 2017 15:24
Flasher
Теперь всё ОК.
Ты бы ещё тут хоть "полслова" написал.

Добавлено: Пт дек 08, 2017 15:45
Flasher
ingerard
С обновлением можно вернуться к короткому варианту.