Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Создание кнопки автоматического переименования
Goto page Previous  1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Jun 23, 2008 20:40    Post subject: Reply with quote

Гм. Все супер. Только в ТЗ было:
Tol!k wrote:

в буфере обмена: приставка;
.
Ключевое слово - в БУФЕРЕ обмена.
Back to top
View user's profile Send private message
LocKtaR-o-DarK



Joined: 12 Aug 2005
Posts: 349
Location: Москва

Post (Separately) Posted: Wed Jun 25, 2008 18:27    Post subject: Reply with quote

Tol!k
ну что же, решаемо
чисто на скрипте писать не было времени
содержимое буфера обмена контролируй сам
_________________
        
Back to top
View user's profile Send private message
LocKtaR-o-DarK



Joined: 12 Aug 2005
Posts: 349
Location: Москва

Post (Separately) Posted: Wed Jul 02, 2008 13:02    Post subject: Reply with quote

обновил скрипт, ссылка та же
_________________
        
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Jul 13, 2008 18:07    Post subject: Reply with quote

команда for ... do ren ... (и прямо на кнопке, и в скрипте вызываемом с кнопки) дает это:

Access violation at address 00407275. Read of address 00000000.
Please report this error to the Author,
with a description of what you were doing when this error occured!
Continue execution?

После нажатия ОК файлы переименовываются и ТС работает как буд-то так и надо.
ТС 7.03, WinXP SP2

P.S. скрытые файлы не должны переименовываться?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Mon Jul 14, 2008 11:00    Post subject: Reply with quote

Tol!k wrote:
команда for ... do ren ... (и прямо на кнопке, и в скрипте вызываемом с кнопки) дает это:

Access violation at address 00407275. Read of address 00000000.

Вряд ли такая ошибка выдается на команды ДОС. Скорее всего (у меня так было) глючит надстройка на оболочку.
У тебя в свойствах папок\файлов (Alt+Enter) дополнительных (не дефолтных) закладок нет?

LocKtaR-o-DarK
Мне кажется, что использовать одновременно и vbs, и batch не очень красиво. Перепиши чтение списка файлов на vbs через
Code:
For Each F In Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0), 1).ReadAll, vbNewLine)


Tol!k
Предлагаю еще один способ решения задачи.
Для этого понадобятся Script Helper и Script Content Plugin.
Для Script Content Plugin добавляем в скрипте возрат еще одной колонки (например, Result1):
Code:
'============================
' Колонка Result1 будет возвращать текстовое содержимое буфера обмена
'============================
content1 = Result1
Function Result1
  On Error Resume Next
  Result1 = CreateObject("TCScript.Helper").GetTextFromClip
  If Err.Number <> 0 Then
    Result1 = ""
  End If
  On Error GoTo 0
End Function

Соответственно, теперь в TC выделяешь файлы\папки, выполняешь команду группового переименования (Ctrl+M) и в поле "Маска для имени файла" по своему усмотрению используешь тэг "[=script.Result1]".
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
LocKtaR-o-DarK



Joined: 12 Aug 2005
Posts: 349
Location: Москва

Post (Separately) Posted: Thu Jul 24, 2008 15:51    Post subject: Reply with quote

Tol!k
для того, чтобы отследить ошибку, надо переписывать команду (сценарий, скрипт) так, чтобы он(а) писала в файл отчёта или выводить ошибки команд в консоль
это называется отладкой и попахивает геммороем
возможно у тебя файлы заняты каким-то процессом
используй unlocker для определения этого варианта
как работает вариант скрипт+сценарий?
Batya
согласен, что не очень красиво, но, все-таки, довольно просто и работоспособно
а дальше?
твой код читает список файлов, в конце которого пустая строка
как в этом случае поведёт себя команда переименования (перемещения) надо тестировать
поэтому надо делать проверку на пустую строку или переписывать код
опять же для вставки маски переименования надо вызывать туеву хучу объектов или юзать regexp
мне лично это немного впадлу
но если напишешь, буду только рад
_________________
        
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Thu Jul 24, 2008 16:46    Post subject: Reply with quote

LocKtaR-o-DarK, ошибку взывает именно "for ... do rename ...".
"for ... do echo ..." или "for ... do type ..." ошибку не взывает.
Что за вариант скрипт+сценарий?
Последним пробовал обновленный http://darqus.org/p/forum/forum_viewtopic.php?74.0#post_198.
Если http://darqus.org/p/forum/forum_viewtopic.php?33.30#post_197, то те-же зайцы.
Back to top
View user's profile Send private message
LocKtaR-o-DarK



Joined: 12 Aug 2005
Posts: 349
Location: Москва

Post (Separately) Posted: Fri Jul 25, 2008 16:00    Post subject: Reply with quote

Tol!k
1. проверь название vbs-файла
оно не должно совпадать с названиями команд
так, возможна ошибка при работе кода если файл будет называться ren или rename или еще как-то
для сценариев и скриптов необходимо задавать уникальные имена, не совпадающие с командами


скрипт
Код:
' В качестве команды указываем путь к скрипту
' допускаетcя использование %commander_path%
' Параметры кнопки: %L
' Автор: LocKtaR-o-DarK™
If
WScript.Arguments.Count=0 Then
MsgBox
"Не заданы параметры!",,"Переименование файлов по маске из буфера"
WScript.Quit
End If
CreateObject
(
"WScript.Shell").Run "c:\renbm.cmd "&WScript.Arguments(0)&" """&CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")&"" ,0

c:\renbm.cmd замени на свой путь, допускается использование %commander_path%

сценарий
Код:
@echo off
chcp 1251>nul
for
/f "delims=" %%a in (%1) do ren "%%a" """"%2_%%~nxa""""

еще один момент, путь запуска у кнопки должен быть пустым
_________________
        
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Mon Jul 28, 2008 14:48    Post subject: Reply with quote

LocKtaR-o-DarK
Ну, как говорится, "Хозяин - барин".
Я, правда, не понял о каких масках файлов ты говоришь.

... Вообщем написал vbs-скрипт.
В скрипте используется Script Helper.
Code:
'======================================================================
' Переименование выделенных файлов\папок -
'   Добавление в начало имени текста из буфера обмена

' Параметры вызова из TC:
' %L
'======================================================================

Option Explicit
Dim CharArr, RemStrArr
'=== Изменяемые параметры =============================================
'Массив недопустимых символов. Заменяем их указанным ниже символом
CharArr = Array(Chr(10), Chr(13), "\", "/")
'Символ для замены
Const ReplaceChar = " "
'Переходный символ
Const TransChar = "_"
'Массив удаляемых строк
RemStrArr = Array("Спёрто с http://www.site.com/", _
                  "пишем, что хотим удалить", _
                  "пишем, что также хотим удалить")
'======================================================================

Dim Mess, FSO, FileList, TCS, Clip, Char, F, FF

SetMess
Set FSO = CreateObject("Scripting.FileSystemObject")
CheckParam
For Each F In Split(FSO.OpenTextFile(FileList, 1, False).ReadAll, vbNewLine)
  F = Trim(F)
  If F <> "" Then
    If FSO.FileExists(F) Then
      Set FF = FSO.GetFile(F)
    End If
    If FSO.FileExists(F) Then
      Set FF = FSO.GetFile(F)
    End If
    If FSO.FolderExists(F) Then
      Set FF = FSO.GetFolder(F)
    End If
    FF.Name = Clip & TransChar & FF.Name
  End If
  Set FF = Nothing
Next

Quit

Sub CheckParam
  If WScript.Arguments.Count = 0 Then
    MessBox Mess(1), 1
    Quit
  End If
  FileList  = WScript.Arguments(0)
  If Not FSO.FileExists(FileList) Then
    MessBox Mess(2), 1
    Quit
  End If
  On Error Resume Next
  Set TCS = CreateObject("TCScript.Helper")
  If Err.Number > 0 Then
    MessBox Mess(3), 1
    Quit
  End If
  On Error GoTo 0
  Clip = TCS.GetTextFromClip
  If Clip = "" Then
    MessBox Mess(4), 1
    Quit
  End If
  For Each Char In RemStrArr
    Clip = Replace(Clip, Char, "")
  Next
  For Each Char In CharArr
    Clip = Replace(Clip, Char, ReplaceChar)
  Next
  Clip = Trim(Clip)
End Sub

Sub SetMess
  Set Mess = CreateObject("Scripting.Dictionary")
  Mess.Add 0,  "Переименование"
  Mess.Add 1,  "Неправильно указаны параметры!"
  Mess.Add 2,  "Входной параметр не является файлом!"
  Mess.Add 3,  "Не зарегистрирован объект 'Script Helper ActiveX for Total Commander'!"
  Mess.Add 4,  "Буфер обмена не содержит текста!"
End Sub

Function MessBox(pMess, pMode)
  Dim lIcon
  Select Case pMode
    Case 1 lIcon = vbCritical    + vbOKOnly
    Case 2 lIcon = vbExclamation + vbOKOnly
    Case 3 lIcon = vbInformation + vbOKOnly
    Case 4 lIcon = vbExclamation + vbOKCancel
  End Select
  MessBox = MsgBox(pMess, lIcon, Mess(0))
End Function

Sub Quit
  Set TCS = Nothing
  Set FSO = Nothing
  Wscript.Quit
End Sub

_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Mon Jan 12, 2009 13:12; edited 1 time in total
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Aug 01, 2008 11:38    Post subject: Заработало Reply with quote

LocKtaR-o-DarK, Batya, обновился до ТК 7.04 - Access violation исчез
:пиво: :баян: :гопак:
Всем спасибо!

ЗЫ
кажется, ТК раньше времени удалял свои временные файлы, а потом их не находил.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sat Jan 10, 2009 21:01    Post subject: Reply with quote

Batya
В скрипте можно заменять отдельные символы
Code:
'Массив недопустимых символов. Заменяем их указанным ниже символом
CharArr = Array(Chr(10), Chr(13), "\", "/")
'Символ для замены
Const ReplaceChar = "_"

Нельзя ли сделать замену подстроки типа "Спёрто с http://www.site.com/" на ничего или хотя-бы на тот же ReplaceChar?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Sun Jan 11, 2009 12:05    Post subject: Reply with quote

Tol!k wrote:
Нельзя ли сделать замену подстроки ... на тот же ReplaceChar?

Это хоть сейчас:
Code:
'Массив недопустимых символов. Заменяем их указанным ниже символом
CharArr = Array(Chr(10), Chr(13), "\", "/", "Спёрто с http://www.site.com/")

Если нужно, могу дополнить скрипт массивом удаляемых строк (символов).
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Jan 11, 2009 19:49    Post subject: Reply with quote

Batya wrote:
Это хоть сейчас
Embarassed
Batya wrote:
Если нужно, могу дополнить скрипт массивом удаляемых строк (символов).
Да, было бы здОрово.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Mon Jan 12, 2009 13:15    Post subject: Reply with quote

Tol!k wrote:
Да, было бы здОрово.

Готово.
См. исходный скрипт.

На имена переменных (например, "Char") можно внимание не обращать Smile
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Jan 12, 2009 22:28    Post subject: Reply with quote

Batya, спасибо.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3  Next
Page 2 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group