Страница 33 из 52

Добавлено: Чт май 07, 2015 12:09
Flasher
sa писал(а):Оба захода без параметров?
Разумеется.

Добавлено: Чт май 07, 2015 12:56
sa
Flasher
Проверь, пожалуйста, на моей тестовой выборке: без 9, 19, 29 … 99 файлов.

Добавлено: Чт май 07, 2015 15:26
Flasher
sa
Всё, нашёл проблему, буду чинить.

Добавлено спустя 2 часа 11 минут:

Проверяй.

Добавлено: Чт май 07, 2015 16:11
sa
На моей тестовой выборке теперь работает за два вызова.
Осталось выполнить два захода внутри самого скрипта, в случае, когда второй параметр отсутствует или 0. :D

Добавлено: Чт май 07, 2015 16:17
Flasher
sa писал(а):два захода внутри самого скрипта
Изволь изъясниться понятным языком.

Добавлено: Чт май 07, 2015 16:51
sa
Flasher
Чтобы два раза скрипт не вызывать, заложить в него два прохода.

Добавлено: Чт май 07, 2015 18:46
Flasher
sa
Я, кажется, понял, что [s]тебе[/s] нужно. Пропускать первые, начиная с единицы, имена, а далее понижать номера до закрытия дыр.
Обойтись без двойного вызова не проблема, сделаю просто немного иначе.

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

'==========================================================
' Именовать файлы нумерацией в структуре активного каталога
' в чётких пределах от 1-цы до числа рассматриваемых файлов

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

' Параметр (необязательный): <фильтр-список расширений>
' Пример: *.jpg;*.jpeg
'==========================================================
With WScript.Arguments
  If .Count Then If .Item(0) <> "" Then Filt = .Item(0) Else Filt = "*.*" End if
End With : Set Dict = CreateObject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ShA = CreateObject("Shell.Application")
Set SC  = CreateObject("ScriptControl")
With CreateObject("WScript.Shell")
  CD = .CurrentDirectory
  If CD = FSO.GetParentFolderName(WScript.ScriptFullName) Then WScript.Quit
  SC.Language = "JScript" : SC.AddCode("function VBSort(array){return(new VBArray"&_
  "(array).toArray().sort(function(a,b){return parseInt(a,10)-parseInt(b,10)}));}")
  ForFolder CD : .SendKeys "^R"
End With

Sub ForFolder(Path)
  Set Items = ShA.NameSpace(Path).Items : Count = Items.Count
  For i = 1 to Count
    If Filt <> "*.*" Then Flt = Replace(Filt, "*", i) Else Flt = i & ".*"
    Items.Filter 224, Flt : Cnt = Items.Count
    If Cnt = 0 Then Exit For
  Next : Items.Filter 64, Filt
  If Items.Count Then
    If i > Count Then T = 1 : i = 1
    For Each F in Items : Dict.Add F, "" : Next
    For Each F in SC.Run("VBSort", Dict.Keys)
      Ext = FSO.GetExtensionName(F) : If Ext <> "" Then Ext = "." & Ext
      BN = FSO.GetBaseName(F) : N = i & Ext
      If IsNumeric(BN) Then
        If T = "" And (CLng(BN) > i Or Clng(BN) < 1) Then
          If Not FSO.FileExists(Path & "\" & N) And Not _
          FSO.FolderExists(Path & "\" & N) Then F.Name = N End If : i = i + 1
        End If
      Else
        While FSO.FileExists(Path & "\" & N) Or FSO.FolderExists(Path & "\" & N)
          i = i + 1 : N = i & Ext
        Wend : F.Name = N
      End If
    Next : Dict.RemoveAll
  End If : Items.Filter 160, "*"
  For Each Fold in Items : ForFolder Fold.Path : Next
End Sub

Добавлено: Чт май 07, 2015 20:06
sa
Flasher писал(а):Я, кажется, понял, что тебе нужно.
Почему мне? Разве
Именовать файлы нумерацией в структуре активного каталога
в чётких пределах от 1-цы до числа рассматриваемых файлов
это не то же самое, что
a-dasler писал(а):Как во всех подкаталогах сразу переименовать просто по порядку номеров?
То есть 1.jpg, 2.jpg, 3.jpg....
?

Добавлено: Чт май 07, 2015 21:05
Flasher
sa писал(а):Почему мне?
Это надо у тебя спросить, почему последние три страницы тебя никак не отпустит, в то время как постановщика исходной задачи давно всё устроило.
sa писал(а):это не то же самое
Если рассматривать детально, то не совсем. И тут нечего больше обсуждать.

Кстати, я там ещё нашёл одну мелочь, но поскольку тебя в большей степени интересует копание в "недо.." и моих обозначениях, нежели результат тестирования и использование, то оставлю, пожалуй, всё как есть.

Добавлено: Чт май 07, 2015 23:21
sa
Flasher писал(а):оставлю, пожалуй, всё как есть.
Правильно! Поправишь, когда кто-то наткнётся. Ещё и спасибо получишь.

Добавлено: Пт ноя 06, 2015 01:32
Flasher
Из ЛС:
Владимир Айвион писал(а):Пример: У нас имеется 4 фотографии товарной позиции, с наименованиями:

1. Vacuum jug black 502941 (1)
2. Vacuum jug black 502941
3. Vacuum jug black pouring 502941
4. Vacuum jug black tea 1 502941

Что я хочу видеть:

1. 502941
2. 502941_2
3. 502941_3
4. 502941_4
Как я уже ранее предлагал, забираем vbs-скрипт по ссылке. Параметры следующие: %WL .+([0-9]{6}) $1
Предполагается, что у фотографий всё-таки есть расширения.
Если счётчик нужно начинать именно с двойки, то в конце 18-й строки 0 заменить на 1.
Если стандартный вариант со скобками не устраивает, то меняем " (" & i & ")" на "_" & i в 20 строке.

Добавлено: Пт ноя 06, 2015 03:34
Владимир Айвион
Flasher, огромное спасибо за помощь и грамотное руководство по добавлению скриптов.

Добавлено: Ср авг 31, 2016 20:35
Dimsok
Не стал создавать отдельную тему. Задача: переименовать rar архивы по имени содержащейся там папки. В каждом архиве по одной папке. Можно осуществить задуманное посредством ИГП, или для решения этой задачи нужны какие-то штучки от Flasher в виде скриптов? :D

Добавлено: Ср авг 31, 2016 21:23
Flasher
Конечно, штучки. Какой wdx тебе будет показывать всё содержимое архива? (рит.)

Добавлено: Ср авг 31, 2016 21:29
Dimsok
Ну мало ли. Ну так если не сложно, сделай штучку. Может, потом можно будет его быстро подкорректировать под другую специфику. Ну там именовать по файлам в архиве и т.п. А то этак даже тупо копипаст не сделаешь, входя в архив, выделяя имя папки и заменяя им имя архива.