Копирование с переименовыванием по счетчику

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Nick писал(а):Тот же вопрос?
Нет. А как он может быть тот же?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Flasher
Я просто не стал копировать сообщение в еще одной теме, а дал ссылку.
Какие строки нужно исправить, чтобы работал скрипт без "постфикс"?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Nick
Там скрипт для других нужд, у него своя специфика, завязанная на двойных расширениях. А здешний скрипт касается именно того, о чём по логике должна вестись речь. И именно его нужно править. Никаких постфиксов в нём нет.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Flasher
Тогда, какие строки нужно исправить в этом скрипте чтобы при наличии файла вида: File_v2.txt получался File_v3.txt и т.п.?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Nick
Это касается ситуации при постановке курсора на файле Name_v№.ext?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Flasher
Да, т.е. примерное поведение как и в этом скрипте.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Nick
И всё же.
Если стоим на name, создавать name_№ или name_v№?
А если стоим на файле name№, то что создавать: name№_1 | name№_v1 | name№+1 | name_№+1 | name_v№+1 ?
А если стоим на файле name_№, то как?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Flasher
Flasher писал(а):Если стоим на name, создавать name_№ или name_v№?
В этом случае, наверно, лучше name_v№.
Flasher писал(а):А если стоим на файле name№
Наверно, лучше name№+1.
Flasher писал(а):А если стоим на файле name_№
name_№+1.

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

Наверно, надо будет скопировать 2 скрипта и поставить на кнопки (один будет создавать "Name_v№", а другой "Name_№").
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Нравится мне это "наверно". )
Зачем 2 скрипта? Обойдусь параметром.

[cut="Проверяем:"]

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

'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Cоздать указанное число копий/пустышек для каждого выбранного элемента
' с добавлением счётчика после базового имени, начиная с последнего номера

' Параметры: %WL "<путь назначения>" <число копий> <вставка до №> <расширение нового файла>
' Если указан 5-й параметр, то создаваться будут пустые элементы

' Примеры:   %WL "%P"   |   %WL "%T" 3   |   %WL "%P" 5 _v   |   %WL "%T" 1 "" txt

' Автор - Flasher ©
'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

Option Explicit : Dim C, List, Path, Count, Px, Ext, ShA, FSO,_
F, Test, Filt, Ex, BN, Max, i, N, M, Items, Cnt, Ln, x, Item, FN

With WScript.Arguments
  C = .Count : If C = 0 Then WScript.Quit
  If C = 1 Then MsgBox "Должно быть указано не менее 2-х параметров!", 48 : WScript.Quit 
  List = .Item(0) : Path = .Item(1) : If C > 2 Then Count = .Item(2) 
  If Count = "" Then Count = Trim(InputBox(String(4, vbLf) & "Введите число создаваемых копий"&_ 
  vbLf & "для каждого выбранного элемента:", Space(13) & "Создание копий выбранных элементов")) 
  If Not IsNumeric(Count) Then WScript.Quit : End If : If C > 3 Then Px = .Item(3)
  If C = 5 Then If .Item(4) <> "" Then Ext = "." & .Item(4) End If
End With : Set ShA = CreateObject("Shell.Application")
Set FSO  = CreateObject("Scripting.FileSystemObject")
Set List = FSO.OpenTextFile(List,,,-1)
Do : F = Trim(List.ReadLine)
  If FSO.FolderExists(F) Then
    Test = 1 : Filt = 160 : BN = FSO.GetFileName(F)
  Else
    Test = 0 : Filt = 192 : BN = FSO.GetBaseName(F)
    Ex = FSO.GetExtensionName(F) : If C < 5 And Len(Ex) Then Ext = "." & Ex
  End If : Max = 0
  For i = 1 To Len(BN)
    N = Right(BN, i) : If IsNumeric(N) Then M = N Else Exit For
  Next
  If M = N Then
    For i = 1 To Len(M)
      If Mid(M, i, 1) <> "0" Then Exit For
    Next : M = Mid(M, i)
  End if
  If M <> "" Then
    Max = CLng(M) : BN = Left(BN, Len(BN) - Len(M))
  ElseIf Right(BN, Len(Px)) <> Px Then
    n = 1
    For i = 1 To Len(Px)
      If Left(Px, i) = Right(BN, i) Then n = i
    Next : BN = BN & Mid(Px, n)
  End If : Set Items = ShA.NameSpace(Path).Items
  Items.Filter Filt, BN & "*" & Ext
  Cnt = Items.Count : Ln = Len(BN) + 1
  If Cnt Then
    For x = 0 to Cnt - 1
      Item = Items.Item(x) : M = Mid(Item, Ln, Len(Item) - Ln - Len(Ext) + 1)
      If IsNumeric(M) Then : If CLng(M) > Max Then Max = CLng(M) End If
    Next
  End If
  For i = 1 To Count
    FN = FSO.BuildPath(Path, BN & Max + i)
    If Test Then
      If C = 5 Then FSO.CreateFolder   FN & Ext  Else FSO.GetFolder(F).Copy FN, 0
    Else
      If C = 5 Then FSO.CreateTextFile(FN & Ext) Else FSO.CopyFile F, FN & Ext, 0
    End if
  Next
Loop Until List.AtEndOfStream
[/cut]
+ пару приблуд:
1) 000№+1.
2) Совпадающее начало вставки с окончанием базового имени будет нивелироваться. Т.е. из MyName.ext при вставке NameIs получится MyNameIs№+1.ext.
Последний раз редактировалось Flasher Сб мар 21, 2015 11:41, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Flasher
Можно ли как-то еще сделать, чтобы была возможность всавки пробела?
Есть особенность. Если необходимо сделать, например 2 символа "--", то ставить в параметрах надо еще на один символ больше.
А, можно поподробнее насчет пункта 2) ?
П.1 это "name№+1" а в п.2 "Is" это вставка постоянных символов (например, "_v")?
Т.е. имеется в виду следующее. Например, есть "Новая папка", при параметре "папка" (<вставка до №>) будет "Новая папка_1", а не "Новая папка папка_1".
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Nick писал(а):Можно ли как-то еще сделать, чтобы была возможность всавки пробела?
Везде, где в каком бы то ни было параметре значатся пробелы, он целиком либо в соответствующей этому части берётся в кавычки.
Nick писал(а):П.1 это "name№+1"
Нет, это учёт нулей отдельно от счётчика.
Nick писал(а):это вставка постоянных символов (например, "_v")?
Про другую вставку нигде речь и не идёт.
Nick писал(а):при параметре "папка"
При параметре папка_.
Nick писал(а):, а не "Новая папка папка_1".
, а не "Новая папкапапка_№+1".

Add: В 45 строке убрал +1. И как я это проморгал. :shock:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Flasher
Спасибо, с пробелами теперь тоже, работает.
Flasher писал(а):В 45 строке убрал +1
У меня и так, вроде, нормально работало :wink:.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Nick
Пожалуйста.
Не совсем нормально. Вставка на символ спереди обрезалась.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Если указан 5-й параметр, то создаваться будут пустые элементы
Flasher
А для чего такое может понадобится?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori
Для чего создавать пустышки? Мне казалось это очевидным. Указываешь, к примеру, cfg/ini, ставишь курсор на exe, нажимаешь, возника(е,ю)т конфиг(и), в котор(ом,ых) потом ведёшь самостоятельную редакцию. Пустышки в т. ч. полезны для создания шаблонов и экспериментов. Это касается и этих скриптов: 1, 2. Ну, и вообще всех кнопок/скриптов/утилит, создающих новый файл.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить