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 

Замена имен выделенных файлов копией имени исходного файла

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
oshizelly



Joined: 04 Sep 2012
Posts: 52

Post (Separately) Posted: Sun Sep 08, 2013 15:47    Post subject: Замена имен выделенных файлов копией имени исходного файла Reply with quote

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

В идеале, хотелось бы два варианта: один с заменой только имени, но не расширения, а второй вариант с заменой имени+расширения (естественно, во втором случае целевой файл может быть только один, так как в противном случае первый переименованный будет затёрт последующими).

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

Спасибо!
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Sep 08, 2013 19:49    Post subject: Reply with quote

Я правильно понял, что базовое имя присваивать нескольким файлам, а цельное только одному?
Если да, то что делать в случае выбора файлов с одинаковым расширением? Счётчик?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
oshizelly



Joined: 04 Sep 2012
Posts: 52

Post (Separately) Posted: Sun Sep 08, 2013 20:04    Post subject: Reply with quote

Flasher wrote:

Если да, то что делать в случае выбора файлов с одинаковым расширением? Счётчик?

Теоретически предполагается, что юзер не будет выбирать в качестве целевых файлов для этой операции несколько файлов с одинаковым расширением. Но по ошибке может, конечно, выбрать Razz
Тогда либо действительно счётчик, либо просто пропускать их, выдавая соответствующее сообщение об ошибке.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Sep 08, 2013 20:25    Post subject: Reply with quote

oshizelly wrote:
выдавая соответствующее сообщение об ошибке
Зачем?

Да, забыл сказать, что активной панелью, как и в случае с атрибутами, будет панель с выбранным списком.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
oshizelly



Joined: 04 Sep 2012
Posts: 52

Post (Separately) Posted: Sun Sep 08, 2013 21:08    Post subject: Reply with quote

Flasher
Flasher wrote:
Зачем?

Ну, чтобы привлечь внимание юзера к тому факту, что при выполнении операции возникли конфликты и поэтому на выходе может быть не совсем то (или совсем не то), что ожидалось.
В идеале такое сообщение должны выдаваться после применения счётчика, чтобы после завершения операции юзер при необходимости внес исправления вручную.

Flasher wrote:
активной панелью, как и в случае с атрибутами, будет панель с выбранным списком.

По этому поводу я уже высказывал своё имхо http://forum.wincmd.ru/viewpost.php?p=95372 в теме про присвоение атрибутов. Но раз по-другому не получается...
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Sep 08, 2013 21:23    Post subject: Reply with quote

oshizelly wrote:
и поэтому на выходе может быть не совсем то (или совсем не то), что ожидалось
Юзер и так должен осознавать принцип работы исходя из подсказки. Сообщения несколько тревожат психику. Пропуск при совпадении хуже погоду не сделает.

oshizelly wrote:
Но раз по-другому не получается.
Я там писал, как можно. Но это не оптимальный вариант.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
oshizelly



Joined: 04 Sep 2012
Posts: 52

Post (Separately) Posted: Sun Sep 08, 2013 22:12    Post subject: Reply with quote

Flasher
Flasher wrote:
Юзер и так должен осознавать принцип работы исходя из подсказки. Сообщения несколько тревожат психику. Пропуск при совпадении хуже погоду не сделает.

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

Flasher wrote:
Я там писал, как можно.

Да, писал http://forum.wincmd.ru/viewpost.php?p=95373, но только для одного файла. А для нескольких альтернативного решения так и не нашлось, если не считать непонятной для меня ссылки на Helper.
Собственно, это могли бы быть два разных скрипта с немного различными кодом: одна версия для единичного целевого файла (в пассивной панели), а вторая - для нескольких выделенных (в активной панели).
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Sep 09, 2013 00:10    Post subject: Reply with quote

oshizelly wrote:
чем он пребывает в заблуждении, что всё получилось, как он рассчитывал
Суть автоматизации в том, чтобы юзер вообще об этом не думал. Если есть совпавшие элементы, которые были пропущены, то и мыслить об этом не имеет смысла, так как всё и так будет на своих местах.
oshizelly wrote:
если не считать непонятной для меня ссылки на Helper
Это пока единственное, чем я могу реализовать подобный алгоритм.

Сообщения не трогаю. Предлагаю пока потестить, что есть:
Code:
'======================================================================================
' Присвоение имени элемента из пассивной панели выбранным элементам в активной

' Условие: путь запуска пустой

' Параметры: 1) %WL; 2) "%T"; 3) "%M"; 4) <полное/базовое имя: 0/1>;
'            5) <при совпадении пропускать/добавлять № счётчика: 0/1>
' Пример:    %WL "%T" "%M" 0 1
'======================================================================================

With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  List = .Item(0) : T = .Item(1) : Name = .Item(2) : OBN = .Item(3) : Add = .Item(4)
End With : Const M = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, vbNewLine)
  If F <> "" Then
    NN = Name
    If FSO.FileExists(F) Then
      If OBN Then
        Ext = FSO.GetExtensionName(F)
        If FSO.FileExists(T & Name) Then NN = FSO.GetBaseName(Name) & "." & Ext Else _
        NN = FSO.GetFileName(Name) & "." & Ext
      End If : If Add Then ReName NN
      If Not FSO.FileExists(NN) Then FSO.GetFile(F).Name = NN
    Else
      If FSO.FileExists(T & NN) Then NN = FSO.GetBaseName(NN)
      If Add Then ReName NN
      If Not FSO.FolderExists(NN) Then FSO.GetFolder(F).Name = FSO.GetFileName(NN)
    End If
  End If
Next : Set FSO = Nothing

Sub Rename(FName)
  FN = FName : n = 0
  Do While FSO.FileExists(FName) Or FSO.FolderExists(FName)
    n = n + 1 : If n < 10^M Then PFix = Right(String(M, "0") & n, M) Else PFix = n
    If FSO.FileExists(FN) Then
    FName = FSO.GetBaseName(FN) & " (" & PFix & ")." & FSO.GetExtensionName(FN)
    Else FName = FSO.GetFileName(FN) & " (" & PFix & ")"
    End If
  Loop
End Sub

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
oshizelly



Joined: 04 Sep 2012
Posts: 52

Post (Separately) Posted: Mon Sep 09, 2013 14:52    Post subject: Reply with quote

Flasher
Quote:
Предлагаю пока потестить, что есть:

Попробовал запустить с параметрами, предложенными в качестве примера:
Code:
%WL "%T" "%M" 0 1

а также
Code:
%WL "%T" "%M" 1 1

и
Code:
%WL "%T" "%M" 1 0


В всех трёх случаях выдаётся сообщение об ошибке, что файл уже существует (Line 25, Char 39). Что он имеет в виду? Что исходнрый файл существует в своей папке? Ну, естественно, он существует, тут не поспоришь Shocked
Что-то не так я делаю. Но что?
Как этим вообще пользоваться? Confused Мы тут несколько разных вариантов обсуждали: копирование имени на один целевой или на несколько, в той же панели или в другой...


Flasher wrote:
Суть автоматизации в том, чтобы юзер вообще об этом не думал. Если есть совпавшие элементы, которые были пропущены, то и мыслить об этом не имеет смысла, так как всё и так будет на своих местах.

Попробую пояснить ситуацию на упрощённом примере. Допустим, есть папка с 20-30 файлами в разных форматах:
07.09.2013 tramparam.doc
02.09.2013 tramparam.doc
08.09.2013 uguaga.xls
01.09.2013 hrasbum.ppt
03.09.2013 tralala.docx

....

В общем, случайные имена, которые были временно присвоены файлам в ходе работы над проектом. Теперь юзер хочет их переименовать, чтобы в имени файла как-то отражалось содержимое документа. Он использует для этого имя последней редакции файла в другой папке: NASA steals the Moonlight.doc. Отлично, запускаем скрипт, переименовываем файлы в целевой папке. На выходе получаем:
NASA steals the Moonlight.doc
NASA steals the Moonlight.xls
NASA steals the Moonlight.ppt
NASA steals the Moonlight.docx
NASA steals the Moonlight.002.doc
....

То есть, оказалось, что в целевой папке случайно оказалось два файла с одинаковым расширением .doc. Один из них - лишний. Но какой именно?? Посмотреть по времени создания/модификации? Не факт, зависит от алгоритма работы с документами. Это можно было посмотреть по дате в исходном имени, но это имя уже пребывает в раю для погибших имён файлов. А от циферки [02] в этом смысле никакой пользы.
А вот если бы юзера предупредили заранее о совпадении имён, то он мог бы отменить операцию и ещё раз посмотреть, что там за дубликаты и какой из них правильный. Вот как-то так, не знаю, сумел ли достаточно объяснить...
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Sep 09, 2013 15:15    Post subject: Reply with quote

oshizelly wrote:
Как этим вообще пользоваться?
Для начала прочесть его название.
oshizelly wrote:
Один из них - лишний. Но какой именно?
Человек выделяет что-то конкретное, если один лишний, то он должен знать об этом заранее. Почему? Потому что если он не обращает внимание на последовательность в списке, то мало смысла в том, чтобы он узнавал, что обработан файл, который не следовало обрабатывать, поскольку скрипт в цикле будет спотыкаться на следующем расширении, а не разбивать всё на группы и выдавать сообщение.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
oshizelly



Joined: 04 Sep 2012
Posts: 52

Post (Separately) Posted: Mon Sep 09, 2013 21:56    Post subject: Reply with quote

Flasher wrote:
Для начала прочесть его название.

Это же читать надо уметь! Laughing
В общем, разобрался, действительно работает, если выделять на активной и копировать имя из пассивной.

И всё-таки нижайшая просьба: нельзя ли сделать дополнительную модификацию скрипта, чтобы он:
1) копировал в обратном направлении из активной в пассивную? Понимаю, что это возможно только для единичного целевого файла, но тем не менее иногда это - именно то, что требуется.
2) при совпадении расширений выделенных целевых файлов выдавал сообщение, давящее на психику юзера. Согласен на любую комбинацию со счётчиком: до переименования, после него или вместо... Лишь бы минимизировать вероятность ошибки из-за невнимательности юзера.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Sep 09, 2013 23:04    Post subject: Reply with quote

oshizelly wrote:
Понимаю, что это возможно только для единичного целевого файла
С Хелпером можно и для списка.

2) Не очень понял конечную цель. Нужно выдавать предупреждение, что в списке есть файлы с одинаковым расширением (мол, примите меры) или спотыкач на каждом, или переименовывать первый попавшийся, а остальные скидывать в лог?
И что с папками делать? Там то логичен только счётчик.
oshizelly wrote:
комбинацию со счётчиком
В каком смысле "комбинацию"?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
oshizelly



Joined: 04 Sep 2012
Posts: 52

Post (Separately) Posted: Mon Sep 09, 2013 23:15    Post subject: Reply with quote

Flasher wrote:
С Хелпером можно и для списка.

Если можно, то хорошо бы сделать...

Quote:
Нужно выдавать предупреждение, что в списке есть файлы с одинаковым расширением (мол, примите меры)

Да, имел в виду именно это.

Quote:
а остальные скидывать в лог?

Если можно сохрнаить в логе исходные имена переименованных файлов, то это в любом случае было бы здорово.

Quote:
И что с папками делать? Там то логичен только счётчик.

С папками - да. Там ведь нет расширений.

Quote:
В каком смысле "комбинацию"?

"Комбинацию" в том смысле, что использование счётчика не исключает необходимости выдачи предупреждения. Обе опции могут использоваться совместно.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Sep 11, 2013 20:52    Post subject: Reply with quote

Нашёл таки время.
oshizelly wrote:
Если можно сохрнаить в логе исходные имена переименованных файлов, то это в любом случае было бы здорово.
Я писал про остальные. Судя по тому, что имелось в виду, это уже отпадает. А список выделенного сохранить и так не проблема.
oshizelly wrote:
Обе опции могут использоваться совместно.
Нет, обе опции могут использоваться по отдельности.

 Вот что получилось на скорую руку:
Если возникнут баги, прошу в студию.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
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
Page 1 of 1

 
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