Страница 7 из 13

Добавлено: Вт мар 10, 2015 21:38
Flasher
Nick писал(а):Тот же вопрос?
Нет. А как он может быть тот же?

Добавлено: Ср мар 11, 2015 14:54
Nick
Flasher
Я просто не стал копировать сообщение в еще одной теме, а дал ссылку.
Какие строки нужно исправить, чтобы работал скрипт без "постфикс"?

Добавлено: Ср мар 11, 2015 19:05
Flasher
Nick
Там скрипт для других нужд, у него своя специфика, завязанная на двойных расширениях. А здешний скрипт касается именно того, о чём по логике должна вестись речь. И именно его нужно править. Никаких постфиксов в нём нет.

Добавлено: Чт мар 12, 2015 18:34
Nick
Flasher
Тогда, какие строки нужно исправить в этом скрипте чтобы при наличии файла вида: File_v2.txt получался File_v3.txt и т.п.?

Добавлено: Чт мар 12, 2015 23:27
Flasher
Nick
Это касается ситуации при постановке курсора на файле Name_v№.ext?

Добавлено: Пн мар 16, 2015 13:22
Nick
Flasher
Да, т.е. примерное поведение как и в этом скрипте.

Добавлено: Ср мар 18, 2015 14:22
Flasher
Nick
И всё же.
Если стоим на name, создавать name_№ или name_v№?
А если стоим на файле name№, то что создавать: name№_1 | name№_v1 | name№+1 | name_№+1 | name_v№+1 ?
А если стоим на файле name_№, то как?

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

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

Наверно, надо будет скопировать 2 скрипта и поставить на кнопки (один будет создавать "Name_v№", а другой "Name_№").

Добавлено: Ср мар 18, 2015 16:42
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.

Добавлено: Пт мар 20, 2015 18:25
Nick
Flasher
Можно ли как-то еще сделать, чтобы была возможность всавки пробела?
Есть особенность. Если необходимо сделать, например 2 символа "--", то ставить в параметрах надо еще на один символ больше.
А, можно поподробнее насчет пункта 2) ?
П.1 это "name№+1" а в п.2 "Is" это вставка постоянных символов (например, "_v")?
Т.е. имеется в виду следующее. Например, есть "Новая папка", при параметре "папка" (<вставка до №>) будет "Новая папка_1", а не "Новая папка папка_1".

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

Add: В 45 строке убрал +1. И как я это проморгал. :shock:

Добавлено: Ср апр 22, 2015 11:57
Nick
Flasher
Спасибо, с пробелами теперь тоже, работает.
Flasher писал(а):В 45 строке убрал +1
У меня и так, вроде, нормально работало :wink:.

Добавлено: Ср апр 22, 2015 12:12
Flasher
Nick
Пожалуйста.
Не совсем нормально. Вставка на символ спереди обрезалась.

Добавлено: Пн авг 21, 2017 02:43
Iori
Если указан 5-й параметр, то создаваться будут пустые элементы
Flasher
А для чего такое может понадобится?

Добавлено: Пн авг 21, 2017 03:15
Flasher
Iori
Для чего создавать пустышки? Мне казалось это очевидным. Указываешь, к примеру, cfg/ini, ставишь курсор на exe, нажимаешь, возника(е,ю)т конфиг(и), в котор(ом,ых) потом ведёшь самостоятельную редакцию. Пустышки в т. ч. полезны для создания шаблонов и экспериментов. Это касается и этих скриптов: 1, 2. Ну, и вообще всех кнопок/скриптов/утилит, создающих новый файл.