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

Добавлено: Пт июл 29, 2011 15:54
Flasher
MVV писал(а):Num+ выделяет только файлы, Shift+Num+ - файлы и папки соответственно.
А для папок ещё клавишу добавлять? Смысл?
MVV писал(а):Вот насчет автоматизации - если лень делать лишние клики, то да, скрипт удобнее.
Автоматизация - это не только ублажение лени, это ещё и ускорение процесса. Эти "клики" ещё и помнить надо ко всему прочему.
MVV писал(а):А если нужно быстро выделить группу файлов с именами произвольной длины - то удобнее именно таким способом, т.к. не нужно ничего исправлять, а просто вписать нужное выражение.
А где нужно что-то исправлять? Уж точно не удобнее, чем скриптами, что идут выше.
MVV писал(а):Которое, кстати, состоит всего из десятка символов.
Вот и подсчитай сколько уйдёт времени у простого юзера на вспоминание, вбитие этого десятка символов, когда в скрипте достаточно ввести всего 1-2 цифры.

Добавлено: Пт июл 29, 2011 15:59
MVV
Если постоянно использовать чужие скрипты, ничего нового не узнаешь:) а так, глядишь, и откроется что-то новое. Завтра понадобится выделять имена с длиной в некотором диапазоне, и придется переписывать скрипт, а тут уже всё работает, и не глючит))

Спорить ни с кем ни о чём не собираюсь, это личное дело каждого.

Добавлено: Пт июл 29, 2011 16:00
shveicar
Хм, стоит попробовать перед указаной строкой добавить:
После добавления в скрипт "задержки" стало заметно, как сначала выскакивает окно (ввода количества символов.. с буквой V..)? а затем появляется сообщение, что файлы не найдены.
Он должен срабатывать как с выделением, так и с его отсутсвием
Ну с этим, я разобрался,- проблема была в запущенной второй копией totala. (извиняюсь,- мой косяк).
MVV писал(а):
Если постоянно использовать чужие скрипты, ничего нового не узнаешь
Если стоит цель научиться писать скрипты, - то лучше пойти на "курсы скрипто-писателей" А если речь идет о конкретной проблеме то для простого юзера проще воспользоваться плагином filex, чем создавать символьные комбинации. (без обид).

Добавлено: Пт июл 29, 2011 16:09
Flasher
MVV писал(а):Если постоянно использовать чужие скрипты, ничего нового не узнаешь
Что на уме и использующего изветсно лучше ему самому. Скрипты можно использовать не только по назначению, но и как вспомогательный материал для реализации новых скриптов, в т.ч. и своих. За приведённой некогда литературой ко мне в личку обращаются именно с целью обучаться самостоятельно.
MVV писал(а):Завтра понадобится выделять имена с длиной в некотором диапазоне, и придется переписывать скрипт
А вот и не угадал. Во втором скрипте можно вписать числа в виде <Min>,<Max>, и будет тебе диапазон. :D
shveicar писал(а):После добавления в скрипт "задержки" стало заметно, как сначала выскакивает окно (ввода количества символов.. с буквой V..)? а затем появляется сообщение, что файлы не найдены.
Странно, по логике с такой маленькой задержкой не должно быть видно. А разные значения подставлялись?

Добавлено: Пт июл 29, 2011 16:26
shveicar
Странно, по логике с такой маленькой задержкой не должно быть видно
Ну если так, тогда у меня проблемы со зрением. :roll:
А разные значения подставлялись?
конечно - ведь первый вариант скрипта, при тех-же значениях срабатывает.

Добавлено: Пт июл 29, 2011 16:32
Flasher
shveicar писал(а):Ну это я так привел, вдруг пригодится для создания нового скрипта.
Так вот я не могу понять, что этот скрипт должен из себя представлять - склеянный вариант или просто достаточно учесть число символов, которое он отправит в буфер?
shveicar писал(а):Ну если так, тогда у меня проблемы со зрением.
Имеется в виду, что с задержкой, что без неё - разницы визуально человек не должен ощутить. Это всего лишь 1/50 секунды.
shveicar писал(а):конечно - ведь первый вариант скрипта, при тех-же значениях срабатывает.
Вообще-то я про Sleep.

Добавлено: Пт июл 29, 2011 16:50
shveicar
Flasher писал(а): Так вот я не могу понять, что этот скрипт должен из себя представлять - склеянный вариант или просто достаточно учесть число символов, которое он отправит в буфер?
Удобнее, (и главное, более быстро) будет - если учесть число символов, которое он отправит в буфер, сразу из выделенного имени файла.
Flasher писал(а): Вообще то я про Sleep
ну так я в обоих скриптах добавил это значение (на всякий случай отрывок из второго скрипта)

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

.SendCommand(331&Types)
.Sleep 20

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

.SendKeystroke "^V~"
если еще добавить время, например 80, то события, перечисленные мной выше- протекают ещё более плавно. Да и потом визуально, коды в обоих скриптах, сильно отличаются.

Добавлено: Пт июл 29, 2011 17:01
Flasher
shveicar писал(а):Удобнее, (и главное, более быстро) будет - если учесть число символов, которое он отправит в буфер, сразу из выделенного имени файла.
Полностью ТЗ для скрипта можно увидеть? У меня пока в голове не укладывается, как из выделенного имени можно отправить число в буфер. К тому же из названия js-скрипта видно, что речь идёт о подсчёте кол-ва файлов. Как это кол-во относится к кол-ву символов выделяемых файлов мне тоже пока непонятно.

Касаемо задержки - похоже машина слабенькая. А если так?:

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

With CreateObject("TCScript.Helper")
  T = .GetTextFromClip
  .SetTextToClip("<^.{" &Name&"}$")
  .Pause = 40
  .SendCommand(331&Types)
  .Pause = 40
  .SendKeystroke "^V~"
  .SetTextToClip(T)
End With

Добавлено: Пт июл 29, 2011 19:53
shveicar
Flasher писал(а):Полностью ТЗ для скрипта можно увидеть?
ТЗ- шаг №1 выбор типа выделяемых данных(1/2/3- все, файлы, папки) шаг №2 Копирование выделенного имени файла в буфер обмена с дальнейшей вставкой (преобразование с помощью скрипта имени в числовое значение) во второе поле (в данном случае - поле выделения нужного количества символов). шаг №3 выделение найденных данных. Согласен, с js-скриптом я привел пример немного не в тему. Но вот существует ведь скрипт Создание текстового файла с содержимым буфера обмена, Другое дело как их преобразовать в цифры? Видел также аналогичный скрипт, который присваивает создаваемому файлу имя из части содержимого, но опять-же это не цифры а символы. В-общем если проблема, слишком сложная, не стоит над ней ломать голову, в конце концов, можно и в ручную подсчитать эти злополучные символы. Спасибо за Помощь.

Добавлено: Пт июл 29, 2011 20:08
Flasher
shveicar писал(а):Копирование выделенного имени файла в буфер обмена с дальнейшей вставкой (преобразование с помощью скрипта имени в числовое значение) во второе поле (в данном случае - поле выделения нужного количества символов)
Я же выше объяснил, что нет смысла использовать это поле. Тут буфер в принципе не нужен. Да, и что значит "преобразование имени в числовое значение"? Может, всё-таки простое вычисление длины имени?
И, как я понимаю, это уже не к ТЗ относится, а к идее реализации.
Пример ТЗ: по нажатию кнопки выделять файлы/каталоги, имеющие длину имён, равную длине имени файла/каталога под курсором.
Ничего не напутал?
shveicar писал(а):Другое дело как их преобразовать в цифры?
Кого - их?
shveicar писал(а):Видел также аналогичный скрипт, который присваивает создаваемому файлу имя из части содержимого, но опять-же это не цифры а символы.
Бррр, у меня уже голова кругом. "Присваивает файлу", "не цифры а символы". Как-то пограмотней мысли надо излагать.
shveicar писал(а):В-общем если проблема, слишком сложная, не стоит над ней ломать голову
"Проблема" не была бы столь "сложной", если бы задача была чётко обрисована без лишей воды с инородными скриптами/примерами и т.п.

Добавлено: Пт июл 29, 2011 21:01
shveicar
Flasher писал(а):Может, всё-таки простое вычисление длины имени?
Ну-можно и так сказать.
Flasher писал(а):ТЗ - это: по нажатию кнопки выделять файлы, имеющие длину имён, равную длине имени файла под курсором.
Ничего не напутал?
А что тут можно путать?
Flasher писал(а):Кого - их?
я имел ввиду символы(буквы, цифры,пробелы и другие знаки встречающиеся в именах)
Flasher писал(а):Как-то пограмотней мысли надо излагать
Буду стараться.

Добавлено: Пт июл 29, 2011 21:03
Flasher
shveicar писал(а):А что тут можно путать?
Так не в моём примере путать. Так мой пример соответствует желаемому?

Добавлено: Пт июл 29, 2011 21:06
shveicar
Конечно соответствует.

Добавлено: Пт июл 29, 2011 21:20
Flasher
Удалить

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

Name = InputBox("Введите число символов:", "Выделение элементов списка по числу символов")
If Len(Name) = 0 Or Not IsNumeric(Name) Then WScript.Quit
Заменить в двух местах

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

      If Len(F.Name) = Abs(Name)
на

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

      If Len(F.Name) = Len(WScript.Arguments(0))
Прописать %N в параметрах.
Для новой кнопки не забыть очистить путь запуска.

Добавлено: Пт июл 29, 2011 22:15
Andrey_A
Я пользуюсь таким скриптом, может поможет, если необходимо подправьте под себя

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

'========================   Описание   =======================================
' Выделяет папки\файлы по к-ву символов в именах, которое задаётся условием
' Выделяет так же в окне после поиска и при cm_DirBranch
'=======================  Дополнение =======================================
' Всвязи с проблемой Helpera (при большом к-ве файлов) использована утилита NirCmd.exe
' После обработки пути (имена) записываются в файл MarkerList.txt
' Это очень удобно, т.к. сохранённое выделение можно заново загрузить!!!
'========================  Параметры =======================================
' Может быть от 0 до 2-параметров
' {Условия поиска для выделения} {Файл список}
' Условий может быть три варианта (первый параметр)
'  =N    - выделяет файлы\папки, в именах которых N символов
'  <N    - выделяет файлы\папки, в именах которых меньше N символов
'  >N    - выделяет файлы\папки, в именах которых больше N символов
'========================    Примеры    ======================================
' без параметров  - выделяет все имена в текущей панели, в которых встречается условие, введённое в окне для ввода условия
'  <5                           - выделяет все имена в текущей панели, в которых меньше 5 символов
'  0 %L                       - выделяет все имена в выделенном, в которых встречается условие, введённое в окне для ввода условия
'  =6 %L                    - выделяет все имена в выделенном, в которых 6 символов
'
' Автор:             Аверин Андрей 
' Версия:          1.0 (17.12.2010)

Option Explicit

Dim FSO, WSH, TCS, Num, Sym, Stroka, FF, ListFile, Name, Cnt, List, PathG, TextZ, Data, MZList, MyFile, Program, ln
Set TCS = CreateObject("TCScript.Helper")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = WScript.CreateObject("WScript.Shell")
'========================  Изменяемые пути  ===================================
   Program = GetPath("%COMMANDER_PATH%\NirCmd.exe")
   MZList = GetPath("%COMMANDER_PATH%\Files\Lists\MarkerList.txt")
'==========================================================================
TCS.LockTC True

If WScript.Arguments.Count = 2 Then
  Set ListFile = FSO.OpenTextFile(GetPath(WScript.Arguments(1)), 1)
  FF = ListFile.ReadAll
  if WScript.Arguments(0) = "0" Then
  	MSBOXX
	Else
	  Stroka = WScript.Arguments(0)
	End If
Else
	TCS.SendCommand ("cm_SelectAll")                           ' Выбираем всё
   WScript.Sleep 200                           						                       ' Пауза
  TCS.SendCommand ("cm_CopyFullNamesToClip") ' Копируем в буфер
  FF = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
  TCS.SendCommand ("cm_ClearAll")
  if WScript.Arguments.Count = 1 Then
  	Stroka = WScript.Arguments(0)
	Else
		MSBOXX
	End If
End If

PathG = TCS.GetSrcPath & "\"
Sym = Mid(Stroka,1,1)
Num = CInt(Replace(Stroka, Sym, ""))
Data = Split(FF, vbNewLine)

If UBound(Data) > 1 Then
	For Cnt = 0 To UBound(Data)
		Name = FSO.GetBaseName(Data(Cnt))
		ln = Len(Name)
		Select Case Sym
		  Case "="
		    if ln = Num Then TextW
		  Case ">"
		    if ln > Num Then TextW
		  Case "<"
		    if ln < Num Then TextW
		  Case Else
		    MsgBox "Введено неправильное условие для выделения" & vbNewLine &_
        "Повторите заново!" , vbOKOnly & vbCritical, "Выделение файлов по к-ву символов в имени"
        WScript.Quit
		End Select
	Next

  Set MyFile = FSO.CreateTextFile(MZList, True)       ' Создаём файл
         MyFile.Write(TextZ)                      ' Сохраняем выделение в файл
         MyFile.Close
  ' Вызываем NirCmd.exe для отправки текста в буфер
  WSH.Run Chr(34) & Program & Chr(34) & " " & "clipboard readfile " & Chr(34) & MZList & Chr(34) ,2,True
  TCS.SendCommand "cm_LoadSelectionFromClip", True  ' Выделяем из буфера
End if

Set WSH = Nothing
Set FSO = Nothing
Set TCS = Nothing
WScript.Quit

Sub MSBOXX
  Stroka = InputBox("Введите Условие поиска по к-ву символов в" & vbNewLine &_
  "именах файлов для дальнейшего выделения" & vbNewLine &_
  "Может быть 3 условия, Примеры:" & vbNewLine &_
  "=5  выделяются имена, в которых 5 символов" & vbNewLine &_
  "<5  выделяются имена, меньше 5 символов" & vbNewLine &_
  ">5  выделяются имена, больше 5 символов" , "Выделение файлов по к-ву символов в имени", "=8")
  if Stroka = "" Then
    MsgBox "Не введены условия для выделения!" & vbNewLine &_
    "Повторите заново!" , vbOKOnly & vbCritical, "Выделение файлов по к-ву символов в имени"
    WScript.Quit
  End If
End Sub

Sub TextW
  TextZ = TextZ & Replace(UCase(Data(Cnt)), UCase(PathG), "") & vbNewLine
End Sub

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