Групповое переименование

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

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

sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

a-dasler писал(а):Порядок устраивает, какой он сейчас, только имена файлов не устраивают.
Правильно, что относительный порядок (итоговую возрастающую нумерацию переименованных файлов 10001,10002, 10003...) следует сохранять или он не важен?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

А как ты сохранишь конечную нумерацию для 10001 при наличии 1 в папке?
Перечитай ещё раз исходный запрос.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher
Вопрос в том, следует ли переименовать 10001 в 2, 10002 в 3, 10003 в 4 или можно и беспорядочно, например 10001 в 4, 10002 в 3, 10003 в 2.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa
Я же не зря написал про исходный пост. Там про порядок сортировки написано отнюдь не двусмысленно.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

Сообщение Flasher »

sa
Не получается воспроизвести на флешке с FAT32 на файлах 10001.1, 10002.2, 10003.3, 10004.4.
Или сама Windows на FAT32 стоит?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher
Сначала в папке создай (скопируй) файл 10004.4, затем 10003.3 и т.д. После скрипта у меня получаются файлы 1.4, 2.3, 3.2, 4.1.
a-dasler
Сообщения: 11
Зарегистрирован: Пн май 04, 2015 10:56

Сообщение a-dasler »

Прошу прощения за отсутствие..
Да, порядок сортировки важен. Т.е. как есть.
Пронумерованные документы сканировались по порядку, сканер выдавал такой порядок:
1.*, а после следующие документы 10001.*, 10002.* и так далее по порядку.

Доступа к сканеру и к сканирующему компьютеру не имею, поэтому там исправлять не могу.

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

Сообщение Flasher »

sa
Ясно. Я читал раньше про пересортицу на FAT-ах, в сети хватает информации и на руборде об этом речи велись.
В общем, если очень надо, то вот
[cut="вариант с сортировкой в т. ч. для проблемных ФС:"]

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

'====================================================================
' Именовать файлы нумерацией в структуре активного каталога

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

' Параметры (необязательные):
' 1) <фильтр-список расширений> (по умолчанию - все)
' 2) <наименьшее число в базовом имени файлов, подлежащих именованию>
'                                                  (по умолчанию - 0)
' Примеры: *.jpg;*.jpeg  |  "" 1000
'====================================================================
With WScript.Arguments
  C = .Count : Min = 0 : If C = 2 Then Min = .Item(1)
  If C 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
  Items.Filter 64, Filt : 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
    i = i + 1 : N = i & Ext : BN = FSO.GetBaseName(F)
    If IsNumeric(BN) Then
      If CLng(BN) >= CLng(Min) Then
        While FSO.FileExists(Path & "" & N) Or FSO.FolderExists(Path & "" & N)
          i = i + 1 : N = i & Ext
        Wend : F.Name = N
      End If
    ElseIf Not FSO.FileExists(Path & "" & N) Then F.Name = N
    End If
  Next :  Dict.RemoveAll : Items.Filter 160, "*"
  For Each Fold in Items : ForFolder Fold.Path : Next
End Sub
[/cut]
a-dasler писал(а):Меня устроил первый вариант скрипта. Ведь в папках и подпапках нигде не было файла 2.*.
ОК. Я это уже понял.
Последний раз редактировалось Flasher Чт май 07, 2015 15:26, всего редактировалось 4 раза.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

Сообщение Flasher »

sa
Можно не только надеяться, но и проверить. 8)
Add: часть кода вынес из процедуры.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher
Запуск без параметров. Из тестового набора с именами 1, 2, 10001 после скрипта получились имена 3, 4, 5. Это верно?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa
Да, при условии, что все расширения в папке одинаковые.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):Да,
Тогда остаётся надеяться, что я окажусь единственным, задавшим подобный вопрос и предположившим, что нумерация начнётся с 1 для случая, когда все файлы переименовываются (второй параметр скрипта отсутствует или равен 0).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa
Будем надеяться. Можно, конечно, ещё подписать "Граждане, не задавайте глупых вопросов! Влючайте логику!". :D
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить