Пометить файл/папку
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Пометить файл/папку Author: A.N.T. PostPosted: Wed Aug 23, 2006 20:55
    —
Часто необходимо каким-нибудь образом временно пометить файл или папку, например цветом... что бы потом его можно было легко найти среди кучи всего остального, что бы можно придумать? Просто хочется горячей клавишей пометить папку, позже при необходимости вернуть в прежнее состояние. Можно конечно воспользоваться скриптом, который меняет дату папки на текущую и поставить фильтр, но такой фильтр у меня уже естьConfused

#2:  Author: CaptainFlintLocation: Москва PostPosted: Wed Aug 23, 2006 21:27
    —
1. Атрибутами.
2. Файловыми комментариями (Ctrl+Z).

#3:  Author: A.N.T. PostPosted: Wed Aug 23, 2006 21:49
    —
1.Комментариями долго, не удобно(в данном случае)...
2.Что значит атрибутами?

#4:  Author: NikLocation: Киров PostPosted: Wed Aug 23, 2006 22:55
    —
Quote:
Можно конечно воспользоваться скриптом, который меняет дату папки на текущую и поставить фильтр, но такой фильтр у меня уже есть

Как вариант - с помощью скрипта ставь дату, намного опережающую текущую (скажем, 2260 год Smile ) и выделяй файлы с такой датой нужным цветом...

#5:  Author: CaptainFlintLocation: Москва PostPosted: Wed Aug 23, 2006 23:02
    —
A.N.T. wrote:
2.Что значит атрибутами?

Зарезервировать для себя, скажем, что файлы/папки с атрибутом "только для чтения" будут для тебя этими самыми, помеченными, ну и задать для них шаблон поиска, плюс цвет навесить, чтобы сразу отличать. Разумеется, не обязательно привязываться к "только для чтения", можно некую комбинацию задать. Например, "только для чтения" + "системный" + неустановленный "архивный". Я нечто подобное уже применял для себя, но потом перешёл на систему с комментариями как более мощную. Менее удобно, конечно - в основном тем, что нельзя задавать комментарии сразу нескольким файлам, но в семёрке этот недостаток будет убран.

Nik wrote:
скажем, 2260 год

Это будет затруднительно. Smile (попробуй сам)

#6:  Author: A.N.T. PostPosted: Thu Aug 24, 2006 08:14
    —
Всем спасибо! Smile Больше конечно подходит вариант Nik'a, вот только менять дату на опережающую текущую ничем не грозит Exclamation Question

#7:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Aug 24, 2006 17:16
    —
Значит так...
Используем Script Content Plugin.
Принцип работы - создаем файл-список, в котором сохраняем помечаемые файлы-папки. Настройте во всех скриптах один путь к файлу-списку.

В папке плагина создаем FilesInList.vbs:
Code:
Dim FSO, FilesList, oTextFile, AllText
FilesList = "D:\TotalCmd\PlugIns\Wdx\ScriptContent\FilesList.txt"
Set FSO = CreateObject("Scripting.FileSystemObject")
content = 0

Set oTextFile = FSO.OpenTextFile(FilesList, 1)
AllText = oTextFile.ReadAll
If InStr(1, AllText, filename, 1) > 0 Then
  content = 1
End If
oTextFile.Close
Set oTextFile = Nothing
Set FSO       = Nothing


Настраиваем инишник плагина:
Code:
[Script]
Section=Files In List
[Files In List]
Script=FilesInList.vbs
LongName=1
ParseDirs=1


Для добавления в файл-список используем vbs-скрипт:
Code:
'==============================================================================
' Добавление полного имени файла в файл-список
'
' В качестве параметра указать:
' %L
'==============================================================================
Option Explicit
Dim FilesList
'============= Задайте файл-список ============================================
FilesList = "D:\TotalCmd\PlugIns\Wdx\ScriptContent\FilesList.txt"
'==============================================================================

If WScript.Arguments.Count = 0  Then
  MsgBox "Не указан параметр - %L", _
         vbOKOnly + vbExclamation, _
         "Копирование имени файла в файл-список"
  WScript.Quit
End If

Dim FSO, oTextFile, AllText, OTF, FileName
Set FSO = CreateObject("Scripting.FileSystemObject")
Set OTF = FSO.OpenTextFile(WScript.Arguments(0), 1)
If FSO.FileExists(FilesList) Then
  Set oTextFile = FSO.OpenTextFile(FilesList, 1)
  AllText = oTextFile.ReadAll
  oTextFile.Close
Else
  AllText = ""
End If

Do While Not OTF.AtEndOfStream
  FileName = OTF.ReadLine
  If InStr(1, AllText, FileName, 1) = 0 Then
    Set oTextFile = FSO.OpenTextFile(FilesList, 8, 2)
    oTextFile.WriteLine FileName
    oTextFile.Close
  End If
Loop

OTF.Close
Set oTextFile = Nothing
Set OTF       = Nothing
Set FSO       = Nothing
WScript.Quit


Для удаления из файла-списка:
Code:
'==============================================================================
' Удаление полного имени файла из файла-списка
'
' В качестве параметра указать:
' %L
'==============================================================================
Option Explicit
Dim FilesList
'============= Задайте файл-список ============================================
FilesList = "D:\TotalCmd\PlugIns\Wdx\ScriptContent\FilesList.txt"
'==============================================================================

If WScript.Arguments.Count = 0  Then
  MsgBox "Не указан параметр - %L", _
         vbOKOnly + vbExclamation, _
         "Удаление имени файла из файла-списка"
  WScript.Quit
End If

Dim FSO, oTextFile, AllText, OTF, FileName
Set FSO       = CreateObject("Scripting.FileSystemObject")
Set OTF       = FSO.OpenTextFile(WScript.Arguments(0), 1)
Set oTextFile = FSO.OpenTextFile(FilesList, 1)
AllText       = oTextFile.ReadAll
oTextFile.Close

Do While Not OTF.AtEndOfStream
  FileName = OTF.ReadLine
  If InStr(1, AllText, FileName, 1) > 0 Then
    Set oTextFile = FSO.OpenTextFile(FilesList, 2)
    AllText = Replace(AllText, FileName, "", 1, -1, 1)
    AllText = Replace(AllText, vbNewLine & vbNewLine, vbNewLine, 1, -1, 1)
    oTextFile.Write AllText
    oTextFile.Close
  End If
Loop

OTF.Close
Set oTextFile = Nothing
Set OTF       = Nothing
Set FSO       = Nothing
WScript.Quit


При настройке цвета указываем Script Content Plugin, колонка Result = 1.

#8:  Author: A.N.T. PostPosted: Thu Aug 24, 2006 17:45
    —
Сейчас попробую Smile
Попробовал
2Batya
<Added> Спасибо конечно за идею.., но неудобно мне переключаться на колонки данном случае, если б удобно было я бы комментариями пользовался... Мне нужно просто тупо отметить цветом файл/папку позже вернуться к ней -> убрать цвет... + я не понял как должен цвет меняться, файлы в список FilesList.txt добавляются и...?

#9:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Aug 24, 2006 18:23
    —
Гм...
По-порядку.
1. Настроил плагин, как описано выше.
2. Заходишь в Настройки - Цвет - Определить цвета для типов файлов - Добавить - Шаблон - Закладка "Плагины", плагин "script", свойство "Result", операция "=", значение "1" - Сохранить - "Отмеченные файлы-папки" - ОК - Выбрать этот шаблон - ОК - Выбрать цвет - ОК - Перетащить новое правило в самый верх - ОК - ОК.
3. На кнопки вешаешь 2 скрипта - для добавления в список и для удаления из него.
4. Выделяешь файлы, жмешь кнопку "Добавить в список" - должны выделиться указанным тобой цветом. Если не выделяется, попробуй перезайти в папку.

Колонки вообще не нужны. Забудь про них. Главное - сделать шаблон, используя плагин.

#10:  Author: A.N.T. PostPosted: Thu Aug 24, 2006 19:02
    —
Хых (как это я сразу не допёр, что нужно шаблон сделать)... Very Happy Спасибо Batya, какой раз выручаешь... Smile О таком решении я даже не догадывался...

#11:  Author: D1PLocation: Тбилиси PostPosted: Thu Aug 24, 2006 20:05
    —
Для подобной цели можно использовать мой плаг WdxGlobalDiz (http://wincmd.ru/plugring/wdx_global_diz.html), правда с ним трудновато будет разобраться.

#12:  Author: NikLocation: Киров PostPosted: Thu Aug 24, 2006 21:40
    —
Quote:
Это будет затруднительно. (попробуй сам)

А в чём, собственно, проблема?

#13:  Author: CaptainFlintLocation: Москва PostPosted: Thu Aug 24, 2006 21:44
    —
Nik wrote:
А в чём, собственно, проблема?

Попробуй выставить 2260 год и посмотри, что получится. Smile

#14:  Author: NikLocation: Киров PostPosted: Thu Aug 24, 2006 23:01
    —
Quote:
Попробуй выставить 2260 год и посмотри, что получится

Ну ладно, я погорячился (D1P меня поймет Smile ). Можно использовать 2016 Smile

#15:  Author: fa1con PostPosted: Fri Aug 25, 2006 01:13
    —
2batja
Поражаюсь твоей находчивости. Где ты находишь столько времени в этом разбираться?
Не знаю как у вас, но у меня после проделанного довольно заметно увеличилось время открытия каталога. Я так понимаю плагин запускает скрипт FilesInList.vbs для каждого директории. Это довольно долго. Поэтому пользоваться я этим не буду. Хотя идея помечать каталоги мне очень понравилась.

Чтоб избавиться от тормозов предлагаю переписать скрипты "добавления"/"удаления" так что б он дописывал/удалял в/из комментария выделенных файлов какую-то строчку ("№;%:% например). Тогда можно будет настроить выделения цветом по "комментарий содержит". Так намного быстрее и плагина не надо. Одно плохо – комменты поганятся.

#16:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Aug 25, 2006 09:40
    —
fa1con
Quote:
Я так понимаю плагин запускает скрипт FilesInList.vbs для каждого директории. Это довольно долго. Поэтому пользоваться я этим не буду.

Все верно. И пользоваться действительно надо по необходимости.

Quote:
Чтоб избавиться от тормозов предлагаю переписать скрипты "добавления"/"удаления" так что б он дописывал/удалял в/из комментария выделенных файлов какую-то строчку ("№;%:% например). Тогда можно будет настроить выделения цветом по "комментарий содержит". Так намного быстрее и плагина не надо. Одно плохо – комменты поганятся.

В принципе, можно было бы сделать, если это кому-нибудь надо. И можно добавлять в начало или конец комментария что-нибудь более-менее красивое, например, ####. Тогда и коменты не будут поганиться.

#17:  Author: A.N.T. PostPosted: Fri Aug 25, 2006 10:31
    —
Batya, а с чем связано, то что цвет не сразу появляется(нужно перезайти в папку)?

#18:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Aug 25, 2006 10:40
    —
A.N.T.
Не знаю.
У меня на левой панели сразу цвет менялся, а на правой приходилось перезаходить.

#19:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Aug 25, 2006 14:08
    —
fa1con wrote:
Чтоб избавиться от тормозов предлагаю переписать скрипты "добавления"/"удаления" так что б он дописывал/удалял в/из комментария выделенных файлов какую-то строчку ("№;%:% например). Тогда можно будет настроить выделения цветом по "комментарий содержит". Так намного быстрее и плагина не надо. Одно плохо – комменты поганятся.


Ну что ж, написал.
Добавление в комментарий:
Code:
'==============================================================================
' Добавление в начало комментария (descript.ion) ####
'
' В качестве параметров указать:
' %L "%Pdescript.ion"
'==============================================================================
Option Explicit

If WScript.Arguments.Count < 2  Then
  MsgBox "Не указаны параметры - %L ""%Pdescript.ion""", _
         vbOKOnly + vbExclamation, _
         "Добавление #### в комментарий"
  WScript.Quit
End If

Dim FSO, oTextFile, AllText, OTF, FileName, CommFile, CommLabel, BegFile, BegFileComm
Set FSO   = CreateObject("Scripting.FileSystemObject")
Set OTF   = FSO.OpenTextFile(WScript.Arguments(0), 1)
CommFile  = WScript.Arguments(1)
CommLabel = "####"

AllText = ""
If FSO.FileExists(CommFile) Then
  Set oTextFile = FSO.OpenTextFile(CommFile, 1)
  On Error Resume Next 'Игнорируем ошибку, если файл пустой
    AllText = oTextFile.ReadAll
  On Error GoTo 0
  oTextFile.Close
End If

Do While Not OTF.AtEndOfStream
  FileName = OTF.ReadLine
  If FSO.FileExists(FileName) Then
    FileName = FSO.GetFile(FileName).Name
  Else
    FileName = FSO.GetFolder(FileName).Name
  End If
  If InStr(1, FileName, " ", 1) > 0 Then
    FileName = """" & FileName & """"
  End If
  BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1)
  If BegFile > 0 Then
    BegFileComm = BegFile + Len(FileName) + 1
    If InStr(1, Mid(AllText, BegFileComm, Len(CommLabel)), CommLabel, 1) = 0 Then
      AllText = Left(AllText, BegFileComm - 1) & CommLabel & " " & Mid(AllText, BegFileComm)
      Set oTextFile = FSO.OpenTextFile(CommFile, 2)
      oTextFile.Write AllText
      oTextFile.Close
    End If
  Else
    Set oTextFile = FSO.OpenTextFile(CommFile, 8, 2)
    If Right(AllText, Len(vbNewLine)) <> vbNewLine Then
      oTextFile.WriteLine
      AllText = AllText & vbNewLine
    End If
    oTextFile.Write FileName & " " & CommLabel
    oTextFile.Close
    AllText = AllText & FileName & " " & CommLabel
  End If
Loop

OTF.Close
Set oTextFile = Nothing
Set OTF       = Nothing
Set FSO       = Nothing
WScript.Quit


Удаление из комментария:
Code:
'==============================================================================
' Удаление в начале комментария (descript.ion) ####
'
' В качестве параметров указать:
' %L "%Pdescript.ion"
'==============================================================================
Option Explicit

If WScript.Arguments.Count < 2  Then
  MsgBox "Не указаны параметры - %L ""%Pdescript.ion""", _
         vbOKOnly + vbExclamation, _
         "Удаление #### в комментарии"
  WScript.Quit
End If

Dim FSO, oTextFile, AllText, OTF, FileName, CommFile, CommLabel, BegFile, BegFileComm, EndFileComm
Set FSO   = CreateObject("Scripting.FileSystemObject")
Set OTF   = FSO.OpenTextFile(WScript.Arguments(0), 1)
CommFile  = WScript.Arguments(1)
CommLabel = "####"

AllText = ""
If FSO.FileExists(CommFile) Then
  Set oTextFile = FSO.OpenTextFile(CommFile, 1)
  On Error Resume Next 'Игнорируем ошибку, если файл пустой
    AllText = oTextFile.ReadAll
  On Error GoTo 0
  oTextFile.Close
End If

Do While Not OTF.AtEndOfStream
  FileName = OTF.ReadLine
  If FSO.FileExists(FileName) Then
    FileName = FSO.GetFile(FileName).Name
  Else
    FileName = FSO.GetFolder(FileName).Name
  End If
  If InStr(1, FileName, " ", 1) > 0 Then
    FileName = """" & FileName & """"
  End If
  BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1)
  If BegFile > 0 Then
    BegFileComm = BegFile + Len(FileName) + 1
    If InStr(1, Mid(AllText, BegFileComm, Len(CommLabel)), CommLabel, 1) > 0 Then
      AllText = Left(AllText, BegFileComm - 1) & Mid(AllText, BegFileComm + Len(CommLabel))
      'Удаление лишних пробелов
      If Instr(BegFile, AllText, FileName & "  ", 1) > 0 Then
        AllText = Left(AllText, BegFileComm - 2) & Mid(AllText, BegFileComm)
      End If
      'Удаление пустых комментариев
      If Instr(BegFile, AllText & vbNewLine, FileName & " " & vbNewLine) > 0 Then
        AllText = Left(AllText, BegFile - 1) & Mid(AllText, BegFile + Len(FileName & " " & vbNewLine))
      End If
      'Удаление лишних концевых строк
      If Right(AllText, Len(vbNewLine)) = vbNewLine Then
        AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
      End If
      Set oTextFile = FSO.OpenTextFile(CommFile, 2)
      oTextFile.Write AllText
      oTextFile.Close
    End If
  End If
Loop

OTF.Close
Set oTextFile = Nothing
Set OTF       = Nothing
Set FSO       = Nothing
WScript.Quit


Настройте шаблон для цвета - плагин "tc", "Комментарий", "содержит", "####".
У кого тачки слабые, сравните, пожалуйста, скорость работы через плагин ScriptContent и черех комментарии.

#20:  Author: fa1con PostPosted: Fri Aug 25, 2006 17:36
    —
Всё работает быстро. Ещё было бы прикольно запихнуть это в один скрипт и писать коментарий не в начало, а в конец. А так рулллез! Буду юзать.

#21:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Aug 25, 2006 17:43
    —
fa1con
В один скрипт точно сливать не буду - смысла особого нет.
А помещать метку в конец комментария возможно. В понедельник покопаюсь.

#22:  Author: A.N.T. PostPosted: Fri Aug 25, 2006 17:56
    —
А мне больше с плагином нравится... Потому что выделяется не только файл, но и все предыдущие директории... Razz

#23:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Aug 25, 2006 18:07
    —
A.N.T. wrote:
А мне больше с плагином нравится... Потому что выделяется не только файл, но и все предыдущие директории...

Что значит "предыдущие"?
Комментарии к папкам также работают. Если у тебя ошибка при работе с папками, сохрани скрипты еще раз из поста выше - я там кое-что менял.

#24:  Author: fa1con PostPosted: Fri Aug 25, 2006 18:14
    —
Batya wrote:
fa1con
В один скрипт точно сливать не буду - смысла особого нет.

Как нет? Есть – один хоткей вместо двух.
Ещё можно удалять пустой descript.ion, как это делает Тотал.

#25:  Author: A.N.T. PostPosted: Fri Aug 25, 2006 18:21
    —
Quote:
Что значит "предыдущие"?
Блин, не знаю какое слово бы подобрать , короче я помечаю файл, та директория в которой он находится, тоже "светится", -> директория, в которой находится "светящаяся директория" тоже светится....... Rolling Eyes

#26:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Aug 25, 2006 18:31
    —
fa1con wrote:
Как нет? Есть – один хоткей вместо двух.

Э нет. Мне такой подход очень не нравится.
Например, если выделить часть файлов, для которых есть комментарий, и часть файлов, для которых нет комментария, и выполнить команду, что скрипт должен делать?

fa1con wrote:
Ещё можно удалять пустой descript.ion, как это делает Тотал.

Это можно.

A.N.T. wrote:
Блин, не знаю какое слово бы подобрать , короче я помечаю файл, та директория в которой он находится, тоже "светится", -> директория, в которой находится "светящаяся директория" тоже светится.......

Это как же у тебя так получилось? А descript.ion для родительских папок содержит комментарий ####? Если нет, то значит ты как-то хитро настроил шаблон. Проверь еще раз.

#27:  Author: A.N.T. PostPosted: Fri Aug 25, 2006 18:42
    —
Quote:
А descript.ion для родительских папок содержит комментарий ####?
(родительские-точно Exclamation ). descript.ion'a вообще нет в родительских папках.
Шаблон правильно настроил... Разве когда я помечаю файл твоим скриптом, в родительских директориях должен тоже descript.ion создаваться? + у меня почему то descript.ion без атрибута "скрытый"...

#28:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Aug 25, 2006 18:46
    —
A.N.T. wrote:
Разве когда я помечаю файл твоим скриптом, в родительских директориях должен тоже descript.ion создаваться?

Вот именно, что не должен. А раз нет descript.ion, то и подцвечиваться не должно. Значит ты шаблон все-таки неправильно настроил. Это уже не мой скрипт, это Тотал так работает по настроенному тобой шаблону.

A.N.T. wrote:
у меня почему то descript.ion не скрытым становится...

Ага, я уже видел. В понедельник исправлю.

#29:  Author: A.N.T. PostPosted: Fri Aug 25, 2006 19:01
    —
Никак не могу понять, твой скрипт должен подсвечивать родительские директории или нет? Было бы очень даже круто...Без плага можно было б юзать + файлы/папки сразу закрашивались...

Шаблон:
Quote:
Плагин: tc
Свойство: Комментарий
Операция: содержит
Значение: ####


Code:
Метка_SearchFor=
Метка_SearchIn=
Метка_SearchText=
Метка_SearchFlags=0|000002000020|||||||||0000
Метка_plugin="tc.comment contains ####"

#30:  Author: fa1con PostPosted: Fri Aug 25, 2006 23:17
    —
Quote:
Например, если выделить часть файлов, для которых есть комментарий, и часть файлов, для которых нет комментария, и выполнить команду, что скрипт должен делать?

Инвертировать. А-ля * для коммандеровского выделения. А хотя хрен его знает как удобнее. Для меня вроде было бы удобнее так. Хотя с другой стороны, если в каталоге куча файлов помечено и хочется с них всех эти метки снять, тогда лучше как сейчас сделано. Ещё, как вариант, можно выполнять действие для файла под курсором.

#31:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Aug 28, 2006 16:24
    —
Постарался сделать универсальный вариант. Теперь скрипт один, и режим его работы зависит от переданных параметров.
Code:
'==========================================================================================
' Массовое Добавление\Удаление\Замена комментария (descript.ion), переданного параметром
'
' В качестве параметров указать:
' %L "%Pdescript.ion" {Комментарий} {Режим работы с комментарием} {Режим места комментария}
' Если в качестве комментария передать "", то для комментария будет использоваться
'   содержимое буфера обмена
' Режим работы с комментарием:
' 1 - Добавление
' 2 - Удаление
' 3 - Инверсия
' Режим места комментария (можно не указывать, по умолчанию - 1):
' 1 - Начало
' 2 - Конец
' 3 - Полностью
' Пример параметров для добавления комментария "####" в начало:
' %L "%Pdescript.ion" "####" 1 1
'==========================================================================================
Option Explicit

If WScript.Arguments.Count < 4  Then
  MsgBox "Неправильно указаны параметры", _
         vbOKOnly + vbExclamation, _
         "Работа с комментариями"
  WScript.Quit
End If
If WScript.Arguments(3) < 1 Or WScript.Arguments(3) > 3 Then
  MsgBox "Неправильно указан режим работы с комментарием", _
         vbOKOnly + vbExclamation, _
         "Работа с комментариями"
  WScript.Quit
End If
Dim Mode2
If WScript.Arguments.Count < 5  Then
  Mode2 = 1
Else
  Mode2 = WScript.Arguments(4)
End If
If Mode2 < 1 Or Mode2 > 3 Then
  MsgBox "Неправильно указан режим места комментария", _
         vbOKOnly + vbExclamation, _
         "Работа с комментариями"
  WScript.Quit
End If
Dim CommLabel
CommLabel = WScript.Arguments(2)
If CommLabel = "" Then
  Dim TCS
  Set TCS   = CreateObject("TCScript.Helper")
  CommLabel = TCS.GetTextFromClip
  Set TCS   = Nothing
  If CommLabel = "" Then
    MsgBox "Не определен комментарий", _
           vbOKOnly + vbExclamation, _
           "Работа с комментариями"
    WScript.Quit
  End If
  CommLabel = Replace(CommLabel, vbNewLine, " ")
  CommLabel = Replace(CommLabel, Chr(10),   " ")
  CommLabel = Replace(CommLabel, Chr(13),   " ")
End If

Dim FSO, oTextFile, OTF, oCommFile
Dim AllText, FileName, CommFile, BegFile, BegFileComm, EndFileComm
Dim Mode1, CompareComm, FindComm, LenC
Set FSO  = CreateObject("Scripting.FileSystemObject")
CommFile = WScript.Arguments(1)
Mode1    = WScript.Arguments(3)
LenC     = Len(CommLabel)

If FSO.FileExists(CommFile) Then
  Set oTextFile = FSO.OpenTextFile(CommFile, 1)
  On Error Resume Next 'Игнорируем ошибку, если файл пустой
    AllText = oTextFile.ReadAll
  On Error GoTo 0
  oTextFile.Close
Else
  On Error Resume Next
  Set oTextFile = FSO.CreateTextFile(CommFile)
  If Err.Number = 0 Then
    oTextFile.Close
    Set oCommFile = FSO.GetFile(CommFile)
    oCommFile.Attributes = oCommFile.Attributes Or 2 'Hidden
    Set oCommFile = Nothing
    AllText = ""
  Else
    MsgBox "Создание " & CommFile & " невозможно из-за ошибки:" & vbNewLine & Err.Description, _
           vbOKOnly + vbCritical, _
           "Работа с комментариями"
    Err.Clear
    Set oTextFile = Nothing
    Set FSO       = Nothing
    WScript.Quit
  End If
End If

Set OTF = FSO.OpenTextFile(WScript.Arguments(0), 1)
Do While Not OTF.AtEndOfStream
  FileName = OTF.ReadLine
  If FSO.FileExists(FileName) Then
    FileName = FSO.GetFile(FileName).Name
  Else
    FileName = FSO.GetFolder(FileName).Name
  End If
  If InStr(1, FileName, " ", 1) > 0 Then
    FileName = """" & FileName & """"
  End If
  BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1)
  If BegFile > 0 Then 'Есть какой-то комментарий для текущего файла
    BegFileComm = BegFile + Len(FileName) + 1 'Позиция начала комментария
    EndFileComm = InStr(BegFileComm, AllText & vbNewLine, vbNewLine, 1) 'Конец комментария + 1
    If EndFileComm - BegFileComm < LenC Then 'Существующий комм. не равен указанному
      FindComm = 0
    Else 'Поверяем дальше
      CompareComm = Mid(AllText, BegFileComm, EndFileComm - BegFileComm)
      If StrComp(CompareComm, CommLabel, 1) = 0 Then 'Существующий комм. = указанному
        FindComm = 2
      Else
        Select Case Mode2
        Case 1 'Начало
          If InStr(1, Left(CompareComm, LenC), CommLabel, 1) > 0 Then
            FindComm = 1
          Else
            FindComm = 0
          End If
        Case 2 'Конец
          If InStr(1, Right(CompareComm, LenC), CommLabel, 1) > 0 Then
            FindComm = 1
          Else
            FindComm = 0
          End If
        Case 3 'Полностью
          FindComm = 0
        End Select
      End If
    End If
    If FindComm = 0 Then 'Существующий комм. не равен указанному
      If Mode1 = 1 Or Mode1 = 3 Then 'Добавляем комментарий
        Select Case Mode2
        Case 1 'Начало
          AllText = Left(AllText, BegFileComm - 1) & CommLabel & " " & Mid(AllText, BegFileComm)
        Case 2 'Конец
          AllText = Left(AllText, EndFileComm - 1) & " " & CommLabel & Mid(AllText, EndFileComm)
        Case 3 'Полностью
          AllText = Left(AllText, BegFileComm - 1) & CommLabel & Mid(AllText, EndFileComm)
        End Select
      End If
      If Mode1 = 2 Or Mode2 = 3 Then 'Удаление комментария полностью
        AllText = DelLine(AllText, BegFile, EndFileComm)
      End If
    ElseIf FindComm = 1 Then 'Указанный комментарий есть
      If Mode1 = 2 Or Mode1 = 3 Then 'Удаляем комментарий
        Select Case Mode2
        Case 1 'Начало
          AllText = Left(AllText, BegFileComm - 1) & Mid(AllText, BegFileComm + LenC + 1)
        Case 2 'Конец
          AllText = Left(AllText, EndFileComm - LenC - 2) & Mid(AllText, EndFileComm)
        Case 3 'Полностью
          AllText = DelLine(AllText, BegFile, EndFileComm)
        End Select
      End If
      If Mode1 = 1 Or Mode2 = 3 Then 'Добавление комментария полностью
        AllText = Left(AllText, BegFileComm - 1) & CommLabel & Mid(AllText, EndFileComm)
      End If
    Else 'FindComm = 2 - Существующий комментарий равен указанному
      If Mode1 = 2 Or Mode1 = 3 Then 'Удаляем комментарий
        AllText = DelLine(AllText, BegFile, EndFileComm)
      End If
    End If
    ' Обработаем после удаления
    If Mode1 = 2 Or (Mode1 = 3 And (FindComm = 1 Or FindComm = 2)) Then
      'Удаление лишних пробелов
      If Instr(BegFile, AllText, FileName & "  ", 1) > 0 Then
        AllText = Left(AllText, BegFileComm - 2) & Mid(AllText, BegFileComm)
      End If
      'Удаление пустых комментариев
      If Instr(BegFile, AllText & vbNewLine, FileName & " " & vbNewLine) > 0 Then
        AllText = Left(AllText, BegFile - 1) & Mid(AllText, BegFile + Len(FileName & " " & vbNewLine))
      End If
      'Удаление лишних концевых строк
      If Right(AllText, Len(vbNewLine)) = vbNewLine Then
        AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
      End If
      'Повторим, на всякий случай
      If Right(AllText, Len(vbNewLine)) = vbNewLine Then
        AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
      End If
      If Len(AllText) = 0 Then
        FSO.DeleteFile(CommFile)
      End If
    End If
    If Len(AllText) > 0 Then
      On Error Resume Next
      Set oTextFile = FSO.OpenTextFile(CommFile, 2)
      If Err.Number = 0 Then
        oTextFile.Write AllText
        oTextFile.Close
      Else
        MsgBox "Запись в " & CommFile & " невозможна из-за ошибки:" & vbNewLine & Err.Description, _
               vbOKOnly + vbCritical, _
               "Работа с комментариями"
        Err.Clear
        Exit Do
      End If
      On Error GoTo 0
    End If
  Else 'Нет комментариев для файла
    If Mode1 = 1 Or Mode1 = 3 Then 'Добавляем комментарий
      On Error Resume Next
      Set oTextFile = FSO.OpenTextFile(CommFile, 8, 2)
      If Err.Number = 0 Then
        If (Right(AllText, Len(vbNewLine)) <> vbNewLine) And (AllText <> "") Then
          oTextFile.WriteLine
          AllText = AllText & vbNewLine
        End If
        oTextFile.Write FileName & " " & CommLabel
        oTextFile.Close
        AllText = AllText & FileName & " " & CommLabel
      Else
        MsgBox "Запись в " & CommFile & " невозможна из-за ошибки:" & vbNewLine & Err.Description, _
               vbOKOnly + vbCritical, _
               "Работа с комментариями"
        Err.Clear
        Exit Do
      End If
      On Error GoTo 0
    End If
  End If
Loop

OTF.Close
Set oTextFile = Nothing
Set oCommFile = Nothing
Set OTF       = Nothing
Set FSO       = Nothing
WScript.Quit

Function DelLine(FullText, BegLine, EndLine)
  If BegLine > Len(vbNewLine) Then
    DelLine = Left(FullText, BegLine - 1 - Len(vbNewLine)) & Mid(FullText, EndLine)
  ElseIf EndLine - 1 + Len(vbNewLine) <= Len(FullText) Then
    DelLine = Left(FullText, BegLine - 1) & Mid(FullText, EndLine + Len(vbNewLine))
  Else
    DelLine = ""
  End If
End Function


Last edited by Batya on Thu Aug 31, 2006 11:41; edited 3 times in total

#32:  Author: fa1con PostPosted: Mon Aug 28, 2006 22:00
    —
Работает. Но ещё надо проверять descript.ion на возможность записи. А то неприятная ошибка выскакивает. Ещё вылазит «path not found» если попытаться пометить что-то в папке My Computer, например. Но это из той же оперы вроде.

#33:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Aug 29, 2006 09:32
    —
fa1con
Давай подробней. Каким образом "неприятная ошибка выскакивает"?
My Computer это виртуальная папка? Если это так, то это не ко мне, а к Гислеру - сколько раз уж говорилось, что работа в TC с такими папками организована крайне плохо. Если же это не виртуальная папка, то как повторить ошибку? На какой именно строке ругается?

#34:  Author: fa1con PostPosted: Tue Aug 29, 2006 13:28
    —
Line: 164, Permission denied
descript.ion с атрибутом Read only.

Line: 61, Permission denied
Файл из каталога, доступ к которому закрыт на запись (шара в сети, например).

Line: 61, Path not found
\\Сетевое окружение\\AceHelper
\\workgroup\comp_name
\\comp_name\share_name
\\Мой компьютер\C:\
\\Панель управления\Назначенные задания\
Виртуальные папки, как ты сказал. Я не силен в программировании, особенно в VB, но нельзя ли сделать что-то вроде

Code:
try{
// попытаться создать текстовый файл
}
catch(...){
//
}


Короче, есть ли в VB аналог try, catch из С++?

#35:  Author: iov PostPosted: Tue Aug 29, 2006 13:48
    —
[quote="Batya"]
Слушай дык таким образом можно из буфера текст любой длины записывать в ion ? Тода можно обойти ограничение на длинну комментария к файлу!
*Batya*
Будет время посмотри плиз, я в скриптах ламер!

#36:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Aug 29, 2006 14:09
    —
fa1con
Поправил скрипт - см. исходный пост.
Теперь ошибку формирую я. Только описание будет такое, какое вернет ОС.

iov wrote:
Слушай дык таким образом можно из буфера текст любой длины записывать в ion ? Тода можно обойти ограничение на длинну комментария к файлу!

Я текст комментария беру не из буфера, а из входного параметра. А длина строки параметров (с учетом раскрутки параметров %L и %P) имеет ограничение 255 символов.
В принципе, ничто не мешает брать из буфера, но этого никто не просил.

#37:  Author: fa1con PostPosted: Tue Aug 29, 2006 14:30
    —
[Feature request] No debug mode Smile

Добавить ещё один параметр. 1/0 – выводить/не выводить ошибки.

#38:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Aug 29, 2006 14:49
    —
fa1con wrote:
[Feature request] No debug mode

Добавить ещё один параметр. 1/0 – выводить/не выводить ошибки.

А смысл? Работа скрипта все равно прерывается. А так я хоть сообщаю, почему.
Если уж тебе не нужны сообщения, закомментарь все MsgBox.

#39: Ну это вот и попросил !!! Если конечно не тудно и время есть Author: iov PostPosted: Wed Aug 30, 2006 09:04
    —
Batya wrote:

Я текст комментария беру не из буфера, а из входного параметра. А длина строки параметров (с учетом раскрутки параметров %L и %P) имеет ограничение 255 символов.
В принципе, ничто не мешает брать из буфера, но этого никто не просил.

Ну это вот и попросил , плиз сильно облегчишь зизнь пользователям! И внесёшь свою лепту в интернет зависимость!! Very Happy
Ну а серьёзно было бы отчень полезно, а то порой комментарий нужен отчень длинный , приходится ручками дописывать!

#40:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Aug 31, 2006 11:45
    —
iov wrote:
Ну это вот и попросил

Исправил скрипт вверху. Для использования необходим ScriptHelper.
Чтобы текст в комментарий попадал из буфера, надо третьим параметром передать пустые кавычки.
Например, параметры для добавления комментария:
%L "%Pdescript.ion" "" 1 3

Кстати, если в тексте в буфере есть переносы строк, я их заменяю на пробелы.

#41: Сенкс начал тестить!!! Author: iov PostPosted: Fri Sep 01, 2006 13:19
    —
Batya wrote:
Ну там много текста я цетировать не буду просто спосибо Batya


Сенкс начал тестить!!!

Первые опыты над подопытным успешны, впечатления положительные. Вера в людей крепнет! Спосибо огромное!

А можно немножко ещё спросить? А что куда надо дописать чтобы
открывалось окошечко для ввода текста и можно было вводить многострочный текст? Такое возможно? Для ситуаций когда не просто добовляешь комментарий а для например дописываешь комментарий для группы файлов уже имеющих комментарий , тогда можно будет выделять разным цветом группы файлов для разных целей...
Это уже многофункциональный скрипт на его основе можно фильтров таких понастроить.... Rolling Eyes

#42:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Sep 18, 2006 13:06
    —
iov wrote:
А что куда надо дописать чтобы открывалось окошечко для ввода текста и можно было вводить многострочный текст?

Многострочный текст вводить нельзя - специфика descript.ion позволяет делать только однострочные комментарии. Сделать же скрипт для работы с files.bbs посложнее.
Если же просто хочется вводить комментарий при каждом запуске скрипта, то можно заменить
Code:
  Dim TCS
  Set TCS   = CreateObject("TCScript.Helper")
  CommLabel = TCS.GetTextFromClip
  Set TCS   = Nothing

на
Code:
  CommLabel = InputBox("Введите комментарий:", "Работа с комментариями", "")

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

#43:  Author: iov PostPosted: Tue Sep 19, 2006 09:09
    —
CommLabel = InputBox("Введите комментарий:", "Работа с комментариями", "") Вот об этом я говорил!!! А если просто убрать все символы перевода строки то тогда вроде должен работать и с многострочным текстом! И окно для ввода многострочного текста! Такое возможно?

#44:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Sep 19, 2006 10:04
    —
iov wrote:
А если просто убрать все символы перевода строки то тогда вроде должен работать и с многострочным текстом!

Сейчас и так все символы перевода строки заменяются на пробелы - актуально, если брать комментарий из буфера.

iov wrote:
И окно для ввода многострочного текста! Такое возможно?

Штатными средствами в WindowsHostScript нет возможности создавать окна для ввода многострочного текста.

#45:  Author: iov PostPosted: Tue Sep 19, 2006 10:28
    —
Очень жаль поповоду ввода многострочноо текста Sad Просто камменты порой к файлам по размерам больше самого файла!
А по поводу буфера я Забыл! Идеально... Куда пиво слать? Благодарности нет предела!!! Теперь будем работать по человечески!

#46:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Sep 19, 2006 10:47
    —
[offtop]
iov wrote:
Куда пиво слать?

Нда.... Жаль, что интернет не позволяет пересылать пиво Very Happy
[/offtop]

#47:  Author: iov PostPosted: Tue Sep 19, 2006 15:48
    —
Блин люди подскажите дома после сбоя не работают скрипты ! Чем можно выличить какая прога устанавливает WindowsHostScript заного или как востановить! Блин доэксперементировался!

#48:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Sep 19, 2006 16:36
    —
А что, у тебя проблемы с поисковиками?

ОС какая?
Вот, что первое попалось для "Microsoft Windows Script 5.6 (Windows 2000, XP)":
http://www.dmtop.ru/search.php?ss=WindowsXP-Windows2000-Script56-KB917344-x86-enu.exe

Иди по первой ссылке.

#49:  Author: iov PostPosted: Wed Sep 20, 2006 07:14
    —
Нет просто дома нет инета Sad Сижу как лох даже без телефона! А на работе увидел ответ вспомнил! Спосибо попробуем!

#50:  Author: iov PostPosted: Fri Sep 22, 2006 08:52
    —
Very Happy Very Happy Very Happy !!! Всё работает лучше некуда! Спосибо Включил в сбоку написал динное описание! Если есть желание то добавлю в лист благодарности как разработчика данного скрипта! Мой icq 5415304!

#51:  Author: SilverVoxLocation: Русь PostPosted: Sat Jun 20, 2009 18:29
    —
Я немножко изменил начало скрипта:

Code:


Option Explicit

WScript.echo ("Массовое Добавление\Удаление\Замена комментария (descript.ion), переданного параметром.  В качестве параметров указать:  %L ''%Pdescript.ion'' {Комментарий} {Режим работы с комментарием} {Режим места комментария}.  Если в качестве комментария передать '''', то для комментария будет использоваться содержимое буфера обмена.  Режим работы с комментарием:  1 - Добавление  2 - Удаление  3 - Инверсия  Режим места комментария (можно не указывать, по умолчанию - 1):  1 - Начало  2 - Конец  3 - Полностью.  Пример параметров для добавления комментария ''####'' в начало:  %L ''%Pdescript.ion'' ''####'' 1 1 ")


В некоторых случаях это удобно, так как комментарии к кнопкам ТС имеют свои ограничения, а иногда приходится много комментировать.
Но не очень-то я смыслю в VBS, да и форматирование текста не получилось, возможно есть решение более конструктивное?
Неплохо было бы реализовать диалог выбора «согласия/отмены» выполнения скрипта и правку параметров командной строки после вывода комментариев.
Или какой-то скрипт расширяющий возможности комментариев к кнопкам панели ТС.

#52:  Author: BatyaLocation: Москва, Россия PostPosted: Sun Jun 21, 2009 15:52
    —
SilverVox wrote:
Неплохо было бы реализовать диалог выбора «согласия/отмены» выполнения скрипта и правку параметров командной строки

Справка TC wrote:
Специальные параметры:

? в качестве первого параметра вызывает перед стартом программы диалоговое окно, содержащее указанные далее параметры. Вы можете изменить их перед стартом программы и даже отменить запуск.

#53:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Tue Apr 27, 2010 08:04
    —
Batya
Скрипт просто замечательный (удивительно что я только на него наткнулся). Но..

1. Доработайте пожалуйста скрипт для поддержки многострочных комментариев. Чтобы из буфера многострочные вставлялись именно как многострочные.
Сейчас перевод строк заменяет на пробелы. Так вот вместо замены на пробелы, перевод строк \n.

2. И я не спец по скриптам, потому глупый вопрос. А насколько обязательно использование Script Helper? Нельзя ли сделать вариант скрипта без обязательной установки\использования Script Helper? Для использования в портабельных сборках например.

3. Обнаружил что если descript.ion создан скриптом, то он в дальнейшем не удаляется Total-ом. При удалении всех комментариев всех объектов, почему-то остаётся висеть пустой файл descript.ion. В отличии от ситуации когда Total сам создал этот descript.ion при создании комментария через Ctrl+Z. Тогда сам файл прекрасно удаляется. TC 7.50a
С чем это связано?

Заранее благодарю.

#54:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Apr 27, 2010 09:30
    —
Den_Klimov wrote:
1. Доработайте пожалуйста скрипт для поддержки многострочных комментариев. Чтобы из буфера многострочные вставлялись именно как многострочные.
Сейчас перевод строк заменяет на пробелы. Так вот вместо замены на пробелы, перевод строк \n.
Когда я делал этот скрипт, TC ещё не поддерживал многострочные комментарии. Поэтому я и сделал замену перевода строк на пробелы.
Посмотрю, что можно сделать.

Den_Klimov wrote:
2. И я не спец по скриптам, потому глупый вопрос. А насколько обязательно использование Script Helper? Нельзя ли сделать вариант скрипта без обязательной установки\использования Script Helper? Для использования в портабельных сборках например.
Script Helper нужен исключительно для добавления комментария из буфера обмена. Если буфер обмена не предполагается использовать, то Script Helper не обязательно устанавливать. В то же время для работы с буфером обмена без Script Helper-а не обойтись. Можно, в принципе, определённым образом использовать Internet Explorer, но этот способ достаточно глючный, поэтому я его не использую.

Den_Klimov wrote:
3. Обнаружил что если descript.ion создан скриптом, то он в дальнейшем не удаляется Total-ом. При удалении всех комментариев всех объектов, почему-то остаётся висеть пустой файл descript.ion. В отличии от ситуации когда Total сам создал этот descript.ion при создании комментария через Ctrl+Z. Тогда сам файл прекрасно удаляется. TC 7.50a
С чем это связано?
Не знаю. Постараюсь разобраться.

#55:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Tue Apr 27, 2010 23:35
    —
Batya
Спасибо огромное, что так быстро отреагировали.

1. Да, помню что раньше не поддерживал. Но теперь поддерживает и даже как-то трудно понять как же мы вообще раньше обходились без многострочных комментариев. Smile
Огромная просьба сделайте пожалуйста, без этого уже и жизнь не в радость. Такой скрипт полезный и такой фатальный недостаток, оставшийся в наследство от древних версий Тотала. Sad

2. Понятно. Значит Script Helper нужен. Так как именно вставка из буфера обмена основная задача.
Может посоветуете как сделать. Сейчас при отсутствии Script Helper скрипт просто выдаёт ошибку. Хотелось бы вместо этого прописать в скрипт проверку утсановлен Script Helper или нет. И если не установлен то устанавливать по подтверждению пользователя (путь к каталогу Script Helper каждый пользователь может прописать в скрипте самостотельно; кстати можно ли использовать внутренние переменные Тотала (например к каталогу Тотала) в этом пути?). Это решит проблему работы скрипта в портабельной сборке, при работе на тех машинах где Script Helper изначально не установлен.
Можно было бы доработать подобным образом скрипт? Сделать вариант скрипта с проверкой и автоустановкой Script Helper.
Script Helper кстати под Seven работает (не проверял)?

3. Постарайтесь плиз. Что кстати заметил. В descript.ion созданных скриптом (и которые не удаляются поэтому), после удаления Тоаталом всех комментариев, то бишь в пустом descript.ion, наблюдаются пустые строки, которых не должно быть. Обратите внимание.

#56:  Author: Loopback PostPosted: Wed Apr 28, 2010 10:39
    —
Den_Klimov
Не планировал выкладывать сейчас, поскольку весь мой "комплекс" скриптов окончательно не доработан, но раз поднялся вопрос именно о портабельном решении редактирования комментариев, выкладываю скрипт отдельно (пока только скомпилированный, т.к. много взаимозавязок). Правда он концептуально отличается от скрипта Batya и не знаю, подойдет ли вам. Я его вешаю на стандартное сочетание Ctrl+Z, при этом если файл один - открывается стандартное окно, а если несколько - окно скрипта, полностью повторяющее вид и функциональность тоталовского. Разумеется, многострочные комментарии поддерживаются. Script Helper не требуется.
Скриншот
Скрипт
В качестве параметров надо передавать %F %P.

#57:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Thu Apr 29, 2010 05:38
    —
Loopback
Самое смешное что я как раз думал также и о подобном вашему скрипте. Именно для удобного массового добавления\редактирования описаний через стандартный Ctrl+Z. И склонялся к тому что вследствие того что это сложно реализовать никто даже не возьмётся.
Спасибо большое! Будем посмотреть. Похоже ваш скрипт удачно дополняет (но не заменяет) скрипт Batya.

Но и скрипт Batya архинужен. С ним просто замечательно удобно и быстро будет из буфера добавлять комментарии (как создавать так и дописывать к имеющимся), даже не открывая диалога Ctrl+Z, что сильно ускоряет дело. Когда Batya его чуток доработает, и главное добавит поддержку многострочности.
Сейчас пока, из-за отсутствия многострочности, его использование ограничено ситуациями однострочных комментариев, что нивелирует всю его полезность (так как всё больше преобладают многострочные комментарии). Sad

#58:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Apr 29, 2010 09:56
    —
Den_Klimov
Скрипт буду переделывать для работы с многострочными комментариями. Вернее, планирую написать новый скрипт, т.к. старый писался почти 4 года назад, и многое сейчас я бы сдела иначе. Только нужно время. Простой переделкой сложно обойтись из-за необходимости правильного учёта концевых символов "В" для многострочных комментариев.

Применение IE для получения содержимого буфера обмена делать не буду - в этом отношении у меня к IE стойкая неприязнь. Скорее склоняюсь к предоставлению возможности зарегистрировать Script Helper, если он не зарегистрирован. Однако, для переносимого TC это не очень хорошо, т.к. после ухода TC останется мусор в реестре. Разве что выполнять дерегистрацию перед выходом из скрипта.

Проблему с пустым descript.ion давно нашёл - пост со скриптом исправлен (спасибо, CaptainFlint).
На всякий случай - изменена строка:
Code:
        If Right(AllText, Len(vbNewLine)) <> vbNewLine Then

на:
Code:
        If (Right(AllText, Len(vbNewLine)) <> vbNewLine) And (AllText <> "") Then

#59:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Sat May 01, 2010 03:31
    —
Batya
Спасибо огромное что не забросили. Скрипт очень нужный. С нетерпением жду новой версии с поддержкой многострочности.

Quote:
Скорее склоняюсь к предоставлению возможности зарегистрировать Script Helper, если он не зарегистрирован. Однако, для переносимого TC это не очень хорошо, т.к. после ухода TC останется мусор в реестре. Разве что выполнять дерегистрацию перед выходом из скрипта.

Да. Сделайте пожалуйста вариант скрипта с авторегистрацией Script Helper, если он не установлен на машине. Пусть будет два варианта скрипта. Для портабельных - с авторегистрацией если не установлен, и также обычный вариант без авторегистрации.

Скрипт может выдавать окошко предупрежение перед регистрацией Script Helper, чтобы пользователь видел что он устанавливает на машине Script Helper, ибо он там пока не стоит, но нужен для рабоыт скрипта. Это позволит пользователю потом запустить его дерегистрацию.
Скрипт же это делать каждый раз не должен. Миллион раз устанавливать и удалять Script Helper в процессе работы это не наш метод. Это по меньшей мере странно, если не сказать хуже. Ведь вставка из буфера обмена используются крайне и крайне активно.

#60:  Author: Tol!kLocation: Арзамас PostPosted: Sat May 01, 2010 13:40
    —
Batya wrote:
Применение IE для получения содержимого буфера обмена делать не буду - в этом отношении у меня к IE стойкая неприязнь. Скорее склоняюсь к предоставлению возможности зарегистрировать Script Helper, если он не зарегистрирован. Однако, для переносимого TC это не очень хорошо, т.к. после ухода TC останется мусор в реестре. Разве что выполнять дерегистрацию перед выходом из скрипта.
А SetClip/GetClip нельзя приспособить?

#61:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Sun May 02, 2010 01:35
    —
А вообще Script Helper надёжный и универсальный вариант? На любой вынь-ОС NT-шной работает, включая 64-битный Seven?
В принципе то зарегить(установить) его проще простого, можно и в самом скрипте автоустановку прописать. Главное чтобы работало быстро и надёжно и не только под XP.
Под XP то через Script Helper работает в принципе вполне резво, адекватно и замечательно, насколько могу судить.

В общем, если Script Helper надёжный и универсальный вариант, и если сделать его автоустановку в скрипте, то тогда он не напрягает.
-------------------------

Loopback
Спасибо. Твой tc_multi_comment_edit прикольная штука. Иногда может быть весьма полезна. Я правда в основном использую её для выборочно-групповой очистки уже имеющихся комментариев. Smile
Нашёл пока всего три условных "недостатка" (куда без них). Smile

1. ЕСЛИ для данного текущего каталого ДО ВСТАВКИ мультикомментария открывался режим "Комментарии" (Ctrl+Shift+F2), то Тотал гад в режиме Комментарии НЕ ХОЧЕТ видеть записанных твоей утилитой коментов, показывая пердыдущие, пока не выйдешь и не зайдёшь в этот каталог снова. Тут даже F2 не помогает. Пока из каталога не выйдешь и снова в него не войдёшь, в режиме Ctrl+Shift+F2 будут показываться старые коменты или их отсутствие. Sad

Кстати скрипт Batya не имеет такого недостатка. Коменты СРАЗУ видят изменения. Даже F2 не надо нажимать. Всё само его скриптом обновляется.

2. Как бы русский язык прикрутить к твоей утилите? Там собствено локализировать всего пару строчек нужно. Smile

3. Можешь сделать плиз чтобы размер был точно такой же как у стандартного окна Ctrl+Z ?

4. Я конечно сильно многого хочу. Но чисто теоретически.. Нельзя ли придумать\реализовать крутую возможность, чтобы если у какой-то группы файлов одинаковые коменты, то в вашей утилите бы они отображались? Понимаю что сильно жирно будет, но всё-таки. Именно в ПРАВКЕ мультикомментариев я вижу самую основную и интересную задачу вашей утилитки. Это был бы её главный конёк. Smile
---------------
5. И ещё один момент.
descript.ion почему-то не удаляется.
Если удалять коменты по очереди обычным Ctrl+Z, то он удаляется. А если сразу все твоей уилиткой то остатся пустой файл descript.ion.
----------------------


Batya
К слову забываю попросить.
Кроме вашего полезного скрипта в котором вы сейчас делаете многострочность, можете также написать также скриптик для автоудаления всех коментариев для всех выделенных файлов и папок. Он бы прекрасно дополнил функционал первого.

Правильней всего наверное в первый скрипт включить функционал удаления комментариев выделенных объектов ("замена на ничто"). И просто передавать ему определнённым параметром что от него требуется удаление. Ведь сейчас именно так и сделано с другими задачами.
Только чтобы не оставался пустой файл descript.ion после удаления всех комментариев таким образом. Smile

#62:  Author: BatyaLocation: Москва, Россия PostPosted: Thu May 06, 2010 09:32
    —
Den_Klimov wrote:
роме вашего полезного скрипта в котором вы сейчас делаете многострочность, можете также написать также скриптик для автоудаления всех коментариев для всех выделенных файлов и папок.

Так ведь удаление всех комментариев работает и в текущем варианте скрипта. Параметры скрипта:
Code:
%L "%Pdescript.ion" 0 2 3


Den_Klimov wrote:
Только чтобы не оставался пустой файл descript.ion после удаления всех комментариев таким образом.

А удаление пустого descript.ion я уже поправил:
Batya wrote:
Проблему с пустым descript.ion давно нашёл - пост со скриптом исправлен

#63:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Thu May 06, 2010 22:44
    —
Batya
Пасиб. Протупил.
Как там кстати дело с многострочностью как-то продвигается?

Batya
Loopback
И главное сделайте плиз поддержку юникодных символов в именах файлов и папок в своих продуктах. Пускай и таким образом как это реализовано в Тотале (по другому я так понимаю и не сделать не выходя за рамки стандарта descript.ion). Бо без этого не жизнь а сплошные мучения. Чуть где какой иероглиф и т.п. и всё, пиши пропало. А если каждый пятый объект такой.. это же чокнуться можно. Ваши продукты в результате в половине случаев становятся полностью бесполезными. Тогда только через станлартный Ctrl+Z что-то можно сделать по отдельности с каждым файлом. И ни о какой мультизмаене коментов мечтать не приходится. Sad

#64:  Author: Loopback PostPosted: Thu May 06, 2010 23:06
    —
Den_Klimov
Хм, я на таких вообще ни разу не видел как тотал работает. Сейчас попробовал... мда. Это значит получается, один комментарий будет виден для всех юникодных файлов с одинаковой длиной. Но видимо да, придется как-то поддерживать это безобразие Smile

#65:  Author: Loopback PostPosted: Fri May 07, 2010 11:46
    —
Den_Klimov
Исправил самые досадные баги, остальное немного позже. Файл по той же ссылке.

#66:  Author: CaptainFlintLocation: Москва PostPosted: Fri May 07, 2010 12:52
    —
Loopback wrote:
Это значит получается, один комментарий будет виден для всех юникодных файлов с одинаковой длиной.

Это верно только если имя файла (вместе с расширением) состоит сплошь из юникодных символов и не включает в себя ничего другого (даже пробелов и точек).

#67:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Sun May 09, 2010 15:43
    —
Loopback
Очень нравится что в утилите версии от 08.05 теперь отображаются мультикомментарии (хоть пока только для файлов). Smile
Выявленные недостатки новой версии отписал в личку.
---------------
Единственное скажу тут по поводу символов в названии отсутствующих в WIN 1251, раз уж этот вопрос ут возник:
У меня есть гуева куча файлов с иероглифами в названии. Так что проверил работу утилитки с именами файлов и папок содержащими символы отсутствующие в WIN1251 (огромное кол-во символов там отсутствует как известно, включая иероглифы). Не работает. Ни на добавление, ни на изменение, ни на удаление. Sad

Total работает с такими именами в файлах и папках следующим образом (и это пока наверное единственно возможный способ, с учётом понятной и привычной программам кодировки файла descript.ion). Когда он пишет в в descript.ion названия объектов то заменяет юникодные символы в названиях файлов и папок знаками вопроса "?". Все остальные символы пишет как есть.
Точно так же Тотал делает с содержимым комментария - если в комментарии есть такие символы он заменяет их на знаки вопроса.
Твоя утилита тоже так делает, но только для содержания комментария. А в названиях объектов (файлов и папок) multi_comment_edit от 08.05.2010 такие символы пока не поддерживает. Sad

В общем поправь плиз. Сделай чтобы так же было как Тотал делает. Пусть заменяются такие символы в названиях объектов на знаки вопроса. Это единственно верный способ и главное Тотал его поддерживает. А то сейчас вообще никак. Sad
---------------

Кстати кто-нить знает, какой опцией в Тотале можно отключить предупреждение при добавлении коментов для файлов и папок с вышеупомянутыми "юникодными" символами в названиях? А то это окошко подтверждения, каждый раз выскакивающее с предупреждением, уже достало.

Если же такой опции нельзя поставить в настройках Тотала, то тогда вообще имеет смысл использовать multi_comment_edit для редактирования даже одиночных коментов для таких файлов и папок (с "юникодными" символами в названии).
---------------
P.S. Лично я бы на месте Гислера сам занялся совершенствованием стандарта descript.ion.
Мультикоментарии уже ввели. Вот бы и ввёл заодно чтобы формат descript.ion по умолчанию создавался в UTF. При этом descript.ion в старых кодировках конечно бы тоже поддерживал и без необходимовсти (присутствие "юникодных" символов отсутствующих в текущей кодировке) даже не менял на UTF.
Но по умолчанию создавал бы descript.ion уже в UTF (с возможностью изменить это поведение опционально), формируя таким образом новый стандарт кодировки для descript.ion.
Другие проги потихоньку бы подтянулись и тоже стали бы с такими descript.ion работать.

В любом случае по крайней мере поддержку UTF для descript.ion можно было сделать.

#68:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Thu Mar 10, 2011 18:34
    —
Loopback
Ваша утилита развивается? Будет развиваться?
Есть ли новые версии?

#69:  Author: Loopback PostPosted: Thu Mar 10, 2011 21:24
    —
Den_Klimov
Если будет что развивать. Как мне кажется, продукт вполне завершенный.

#70:  Author: HEXFIXLocation: Калининград PostPosted: Sun Mar 13, 2011 10:58
    —
Здравствуйте.
Пытаюсь воспользоваться скриптом от Batya, который приведён на первой странице топика. Ничего не выходит. Вот что получается :


#71:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Mar 13, 2011 11:55
    —
HEXFIX
Там приведено несколько скриптов. И вдобавок на следующих страницах присутствовали их модифицированные варианты.

#72:  Author: HEXFIXLocation: Калининград PostPosted: Sun Mar 13, 2011 12:11
    —
Avada
Имеется в виду скрипт, добавляющий файл (папку) в список. Модифицированный вариант (с добавлением комментария) работает отлично. Просто A.N.T писал, что если использовать первый вариант, при выделении файла выделяется и родительская папка. Вот я тоже такую штуку хочу. Very Happy

#73:  Author: ask-rusLocation: Russian Federation PostPosted: Sun Mar 13, 2011 13:26
    —
Loopback wrote:
Если будет что развивать. Как мне кажется, продукт вполне завершенный.

Отличный продукт, одно но - значок какой-то AIMP-овский...

#74:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Mar 13, 2011 13:30
    —
ask-rus
Обычный значок AutoIt-овских экзешников. Использовался, когда AIMP ещё даже в проекте не было. Обе программы начинаются с буквы "A", так что направление решения напрашивается.

#75:  Author: ask-rusLocation: Russian Federation PostPosted: Sun Mar 13, 2011 13:48
    —
Раз это обычный значок AutoIt и AutoIt-скриптов, тогда я за возможность скрыть его, как нет значка в стандартном диалоге правки комментария TC, чтобы не наблюдать "никакой" разницы.

#76:  Author: Loopback PostPosted: Sun Mar 13, 2011 20:30
    —
ask-rus wrote:
Раз это обычный значок AutoIt и AutoIt-скриптов, тогда я за возможность скрыть его, как нет значка в стандартном диалоге правки комментария TC, чтобы не наблюдать "никакой" разницы.

Я пробовал, не получается. Такой вид диалога (кнопка закрытия без системного меню) специфичен только для Дельфи. Если посмотреть код VCL, там просто удаляется значок формы. К сожалению, Autoit этого сделать не дает.

А значок можно поменять на любой свой, например ResurceHacker-ом.

#77:  Author: sEXEcutor PostPosted: Tue Mar 22, 2011 02:21
    —
Решение для папок (с BitTorrent-уклоном) добавил сюда.

#78:  Author: ask-rusLocation: Russian Federation PostPosted: Wed Mar 30, 2011 12:37
    —
Batya wrote:
Скрипт буду переделывать для работы с многострочными комментариями. Вернее, планирую написать новый скрипт, т.к. старый писался почти 4 года назад, и многое сейчас я бы сдела иначе. Только нужно время. Простой переделкой сложно обойтись из-за необходимости правильного учёта концевых символов "В" для многострочных комментариев.

Применение IE для получения содержимого буфера обмена делать не буду - в этом отношении у меня к IE стойкая неприязнь. Скорее склоняюсь к предоставлению возможности зарегистрировать Script Helper, если он не зарегистрирован. Однако, для переносимого TC это не очень хорошо, т.к. после ухода TC останется мусор в реестре. Разве что выполнять дерегистрацию перед выходом из скрипта.

Может чем помочь? Smile

#79:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Mar 30, 2011 14:18
    —
ask-rus wrote:
Может чем помочь?

В чём?

#80:  Author: ask-rusLocation: Russian Federation PostPosted: Wed Mar 30, 2011 15:14
    —
Batya wrote:
В чём?

Интересуюсь, как там новый скрипт с многострочными комментариями. А с хелпером можно не озадачиваться, сейчас ещё на каждый второй твой скрипт такую "предоставлять возможность"...

#81:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Mar 30, 2011 17:27
    —
ask-rus wrote:
Интересуюсь, как там новый скрипт с многострочными комментариями.

Пока нет возможности (времени) этим заняться Sad

#82:  Author: pvkl PostPosted: Wed Jul 20, 2011 14:59
    —
Здравствуйте,все формучане и непосредственно Batya. Сразу признаюсь я девушка и в глазах опытных программистов и пользователей - чайник.
.Меня заинтересовали ваши скрипты,но объясните на польцах куда я должна скопировать выложенные тексты скриптов и как заставить их работать и подойдут ли они для следующей задачи.
Я по долгу работы имею хранилище фотографий очень много-много папок в главной папке Фото. Информация с фотографий заносится в базу данных. Хотелось бы те папки(те фотографии с которых Я уже занесла информацию) помечать каким-либо цветом,чтобы было удобнее понимать что еще не просмотрено/не занесено.
Подскажите пожалуйста если обсуждаемое в этой теме не подходит,то может есть еще какие-то решения данной задачи.
Большое спасибо. Embarassed

#83:  Author: FlasherLocation: Москва PostPosted: Wed Jul 20, 2011 15:34
    —
pvkl
Можно, конечно, обсудить пометку файлов, но, ИМХО, лучше сперва обсудить сам процесс манипуляций над фотографиями. Какого рода информация проверяется, заносится и т.п.? Есть общий критерий? Может, достаточно создать скрипт/батник, который всю необходимую информацию из всех фотографий вытащит?

#84:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jul 20, 2011 15:58
    —
pvkl wrote:
но объясните на польцах куда я должна скопировать выложенные тексты скриптов

Объяснялось многократно, поиск по форуму в помощь. Примеры: раз, два, три.

#85:  Author: pvkl PostPosted: Wed Jul 20, 2011 16:03
    —
информация с фотографий анализируется вручную,это процесс не требующий автоматизации.Вкратце говоря это разное оборудование,установленное на разных адресах,сличается модель,заводские номера итп...
Нужно именно пометка папок)

Добавлено спустя 4 минуты:

Avada, спасибо за подсказку,примерно я так и предполагала что делается через текстовый файл,вот только не очень теперь понимаю насколько подойдет мне скрипт,написанный Batya для моих целей,в примерах говорится о информации на самих файлах,мне нужно отмечать цветом именно папки...

#86:  Author: FlasherLocation: Москва PostPosted: Wed Jul 20, 2011 16:12
    —
pvkl wrote:
Вкратце говоря это разное оборудование,установленное на разных адресах,сличается модель,заводские номера итп...
Т.е. эта модель и номера берутся не из самих фотографий, а из других источников? Если вся информация берётся с инфо-носителя, то любой процесс можно автоматизировать. Если с бумажного, то - другое дело.

#87:  Author: pvkl PostPosted: Wed Jul 20, 2011 16:19
    —
нет с фотографий,просто фотографии все очень разного качества,иногда сделанные через зеркала итп итд,все оборудование работающее а иной раз приносят такие фото,где ракурса мягко говоря неудачные,те многое приходится додумывать,так что об автоматизации процесса я считаю нет смысла говорить,иначе перепроверять за автоматизированным процессом будет гораздо сложнее чем снять данные вручную.

#88:  Author: FlasherLocation: Москва PostPosted: Wed Jul 20, 2011 16:38
    —
Ясно. Творческий процесс. Скрипты Batya будут работать и с папками.

ЗЫ: Только у меня почему-то не работают с кириллицей. Точнее ТС не воспринимает её в соотв. кодировке.
Сам он кодирует так (и информация появляется): ‡ Є §л ####
А скрипт дописывает так (информации нет): Заказы ####

#89:  Author: pvkl PostPosted: Wed Jul 20, 2011 17:27
    —
Flacher, могли бы вы мне точно скопировать скрипт Batya и что с ним сделать,а то она там столько разных скриптов писал.
Буду очень благодарна Embarassed

#90:  Author: FlasherLocation: Москва PostPosted: Wed Jul 20, 2011 17:31
    —
Думаю, что имеет смысл пользоваться последним модифицированным.
Что делать - написано в шапке скрипта. Нижнего примера параметров достаточно для данной задачи. В общих чертах.
Также стоит прочесть подпись снизу. Более подробно см. тут.

P.S. Мой ник - Flasher

#91:  Author: Йяхе PostPosted: Tue May 29, 2018 01:09
    —
Batya wrote:
Постарался сделать универсальный вариант.

Давно пользуюсь вашим скриптом. А сейчас добавил в качестве комментария url с кириллицей, скопированный из адресной строки браузера. Но кириллица записалась некорректно - с ошибкой в кодировке.



Last edited by Йяхе on Fri Jun 01, 2018 00:12; edited 2 times in total

#92:  Author: FlasherLocation: Москва PostPosted: Tue May 29, 2018 02:29
    —
Йяхе
1. Советую выполнить 3 и 4 пункты снизу памятки.
Исходный URL тоже бы не помешало привести.

#93:  Author: Йяхе PostPosted: Fri Jun 01, 2018 00:12
    —
%L "%Pdescript.ion" "" 1 2
TC 9.12
"http://www.consultant.ru/search/?q=Постановление+Правительства+РФ+от+06.05.2011+N+354"

#94:  Author: FlasherLocation: Москва PostPosted: Fri Jun 01, 2018 02:02
    —
А если адрес писать 3-м параметром?

#95:  Author: Йяхе PostPosted: Sat Jun 02, 2018 00:51
    —
Flasher
Так? %L "%Pdescript.ion" "" 3 2?
То же самое.

Это происходит только при добавлении текста, скопированного в адресной строке браузера.

#96:  Author: FlasherLocation: Москва PostPosted: Sat Jun 02, 2018 01:06
    —
Йяхе
А где здесь написан адрес? По-прежнему там "" вместо адреса.
Про смену флага у 4-го параметра я не писал.

#97:  Author: Йяхе PostPosted: Sat Jun 02, 2018 01:49
    —
Торможу к вечеру.
Так добавился нормально.

#98:  Author: FlasherLocation: Москва PostPosted: Sat Jun 02, 2018 02:01
    —
Значит, есть проблемы либо со сторонним ремейком буфера обмена либо с его чтением.
Избавимся от Хелпера. 48-51 строки меняем на:
Code:
  With GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69)")
    .GetFromClipboard : CommLabel = .GetText
  End With
На Win x64 запуск от %WinDir%\SysWOW64\wscript.exe.

#99:  Author: Йяхе PostPosted: Sat Jun 02, 2018 02:55
    —
Спасибо, все ок.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group