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

Кнопка, перетаскивание файла на панель, относительный путь

Добавлено: Пн апр 05, 2010 18:02
_Johm
Перетаскивая exe-файл на панель кнопок, можно ли научить тотал автоматом подставлять %COMMANDER_PATH% ?

Добавлено: Пн апр 05, 2010 18:09
Вахмурка
Насколько я знаю, нет, зато вставка переменных окружения есть в TWinKey.

Добавлено: Пн апр 05, 2010 18:23
_Johm
Не понял про TWinKey. Как он может помочь в данной теме?

Добавлено: Пн апр 05, 2010 18:30
Вахмурка
Изображение

Добавлено: Пн апр 05, 2010 18:45
Avada
Вахмурка
Во-первых, теперь можно. В TC 7.55 при перетаскивании на тулбар файла/подкаталога, находящегося где-то в каталоге или одном из подкаталогов запущенного TC, автоматически вместо соответствующей части абсолютного пути поставляется %COMMANDER_PATH%. То же относится и к добавлению в меню избранных каталогов.
Во-вторых, да, в TWinKey теперь можно создать специальное контекстное меню, предназначеннное только для настроек тулбара и пользовательских меню. С переменными, параметрами для подстановки в сответствующее поле и прочим, на что фантазии хватит. Собственно, примерчик такого меню в дистрибутиве TWinKey уже имеется.

_Johm
В указаном на скрине меню надо просто выбрать строку и щёлкнуть. В позиции курсора вставится указанная переменная.

Добавлено: Пн апр 05, 2010 19:00
_Johm
Лихо вы картинки публикуете, спасибо. Но где вызываеться это меню (где нажать правую кнопку)?

Добавлено: Пн апр 05, 2010 19:07
Вахмурка
2Avada
Во-первых, теперь можно. В TC 7.55 при перетаскивании на тулбар файла/подкаталога, находящегося где-то в каталоге или одном из подкаталогов запущенного TC, автоматически вместо соответствующей части абсолютного пути поставляется %COMMANDER_PATH%
Хорошая новость - действительно работает! Плохие новости: первое, это не относится к другим переменным окружения (скажем, %SystemRoot%). Второе - я не нашел этого новшества в истории. Опять глаза разуть?

2Johm
Не правая кнопка, а в TWinKey ты настраиваешь свою для плагина TCDirMenu.

Добавлено: Пн апр 05, 2010 19:37
Avada
Вахмурка писал(а):Плохие новости: первое, это не относится к другим переменным окружения (скажем, %SystemRoot%).
И вот тут в игру вступает TWinKey.
Вахмурка писал(а):Второе - я не нашел этого новшества в истории. Опять глаза разуть?
Рискуя показаться некуртуазным, вынужден ответить утвердительно.
20.12.09 Added: When dragging file/dir to button bar, or adding dir to Ctrl+D menu, store all paths below Total Commander path as relative path with environment variable %COMMANDER_PATH%
То есть:
20.12.09 Добавлено: При перетаскивании файла/каталога на панель инструментов или при добавлении каталога в меню Избранного (CTRL+D) все пути к файлам и подкаталогам, расположенным в каталоге Total Commander, сохраняются как относительные пути при помощи переменной окружения %COMMANDER_PATH%.
В порядке моральной компенсации могу сказать, что меня самого не так давно в эту фичу на ру-борде буквально ткнули мордой, что было особенно пикантно, поскольку я-то историю ещё и переводил...

А в TWinKey для удобства вызова спецменю (это команда Templates в секции для TCDirMenu на странице настроек "Плагины") лучше задать что-нибудь простенькое и при этом заведомо отсутствующее в стандартном функционале TC. У меня это клавиша Num5.

Добавлено: Пн апр 05, 2010 23:15
Batya
Также можно периодически с помощью скрипта обновлять default.bar вот такой кнопкой:

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

TOTALCMD#BAR#DATA
"%Commander_Path%\Utils\WHS\ReplaceText.vbs" "%Commander_Path%\default.bar" "%Commander_Path%"
"%%Commander_Path%%"
%Commander_Path%\WCMICONS.DLL
Замена путей в default.bar


-1

Добавлено: Ср апр 07, 2010 12:24
Flasher
Вахмурка писал(а):это не относится к другим переменным окружения (скажем, %SystemRoot%)
Для сих нужд вот этот скриптик очень кстати.

Добавлено: Сб апр 17, 2010 02:47
Andrey_A
Также можно периодически с помощью скрипта обновлять default.bar
У меня файлы .bar лежат в папке BAR , и файлов панели несколько, можно ли разом автоматически менять путь с:\Тоtal... на "%Commander_Path%" во всех файлах в папке

Добавлено: Сб апр 17, 2010 15:44
Batya
Andrey_A писал(а):У меня файлы .bar лежат в папке BAR , и файлов панели несколько, можно ли разом автоматически менять путь с:\Тоtal... на "%Commander_Path%" во всех файлах в папке
Новый скрипт работает для выделенных файлов:

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

'=============================================
' Замена текста в файлах из файла-списка
'
' Параметры:
' {текст для поиска} {текст для замены} {файл-список}
'=============================================
Option Explicit
Dim FSO, FF, F, List, Str1, Str2, Text
Set FSO = CreateObject("Scripting.FileSystemObject")
With WScript
  FF   = .Arguments(2)
  Str1 = .Arguments(0)
  Str2 = .Arguments(1)
End With
List = Split(FSO.OpenTextFile(FF).ReadAll, vbNewLine)

For Each F In List
  F = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F))
  If FSO.FileExists(F) Then
    Text = FSO.OpenTextFile(F, 1).ReadAll
    Text = Replace(Text, Str1, Str2, 1, -1, 1)
    FSO.OpenTextFile(F, 2).Write Text
  End If
Next

Set FSO = Nothing
WScript.Quit 0
В скрипте поменял порядок параметров. Кнопка:

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

TOTALCMD#BAR#DATA
"%Commander_Path%\Utils\WHS\ReplaceText4FileList.vbs" "%Commander_Path%"
"%%Commander_Path%%" %L
%Commander_Path%\WCMICONS.DLL
Замена путей в выделенных файлах


-1 

Добавлено: Сб апр 17, 2010 18:17
Andrey_A
Спасибо Batya, в который раз выручаешь! Всё шикарно работает, я сделал файл-список. где прописал все файлы требующие замены путей. Теперь ничего выделять не надо - нажал и порядок!!!

Добавлено: Сб апр 17, 2010 20:07
GGS
Batya писал(а):Новый скрипт работает для выделенных файлов
Шикарный скрипт, но...
Среди выделенных файлов попался один read only, получаем:

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

---------------------------
Windows Script Host
---------------------------
Сценарий:	F:\Program Files\TotalCmd\TOOLs\VBScript\ReplaceText4FileList.vbs
Строка:	22
Символ:	5
Ошибка:	Разрешение отклонено
Код:	800A0046
Источник: 	Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------
и дальнейшая обработка файлов не производится.
Если попадаем на пустой файл:

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

---------------------------
Windows Script Host
---------------------------
Сценарий:	F:\Program Files\TotalCmd\TOOLs\VBScript\ReplaceText4FileList.vbs
Строка:	20
Символ:	5
Ошибка:	Ввод данных за пределами файла
Код:	800A003E
Источник: 	Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------
Возможно ли в подобной ситуации всё-таки продолжить работу с остальными файлами?

Добавлено: Пн апр 19, 2010 10:17
Batya
GGS писал(а):Возможно ли в подобной ситуации всё-таки продолжить работу с остальными файлами?

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

'=============================================
' Замена текста в файлах из файла-списка
'
' Параметры:
' {текст для поиска} {текст для замены} {файл-список}
'=============================================
Option Explicit
Dim FSO, WSH, FF, F, List, Str1, Str2, Errors
Set FSO    = CreateObject("Scripting.FileSystemObject")
Set WSH    = CreateObject("WScript.Shell")
Set Errors = CreateObject("Scripting.Dictionary")

With WScript
  FF   = .Arguments(2)
  Str1 = .Arguments(0)
  Str2 = .Arguments(1)
End With
List = Split(FSO.OpenTextFile(FF).ReadAll, vbNewLine)

On Error Resume Next
For Each F In List
  Main F, Str1, Str2
  If Err.Number > 0 Then
    Errors.Add F, Err.Description
    Err.Clear
  End If
Next
On Error GoTo 0

If Errors.Count > 0 Then  MsgBox JoinErr(Errors), 0, "Замена текста в файлах из файла-списка"

Set Errors = Nothing
Set WSH    = Nothing
Set FSO    = Nothing
WScript.Quit 0

Sub Main(pPath, pStr1, pStr2)
  Dim lText, lPath
  If pPath <> "" Then
    lPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
    If FSO.FileExists(lPath) Then
      If FSO.GetFile(lPath).Size > 0 Then
        lText = FSO.OpenTextFile(lPath, 1).ReadAll
        If InStr(1, lText, pStr1, 1) > 0 Then
          lText = Replace(lText, pStr1, pStr2, 1, -1, 1)
          FSO.OpenTextFile(lPath, 2).Write lText
        End If
      End If
    End If
  End If
End Sub

Function JoinErr(pDic)
  Dim lKey
  For Each lKey In pDic
    JoinErr = JoinErr & vbNewLine & _
              "Файл """ & lKey & """ - " & pDic(lKey)
  Next
  JoinErr = "Для следующих файлов операция завершена с ошибками:" & vbNewLine & JoinErr
End Function
Если были ошибки, выдается их список.
Read-only надо пропустить (как сейчас) или сделать, чтобы перезаписывались?