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

Добавлено: Вт май 05, 2015 13:07
sa
a-dasler писал(а):Порядок устраивает, какой он сейчас, только имена файлов не устраивают.
Правильно, что относительный порядок (итоговую возрастающую нумерацию переименованных файлов 10001,10002, 10003...) следует сохранять или он не важен?

Добавлено: Вт май 05, 2015 13:09
Flasher
А как ты сохранишь конечную нумерацию для 10001 при наличии 1 в папке?
Перечитай ещё раз исходный запрос.

Добавлено: Вт май 05, 2015 13:19
sa
Flasher
Вопрос в том, следует ли переименовать 10001 в 2, 10002 в 3, 10003 в 4 или можно и беспорядочно, например 10001 в 4, 10002 в 3, 10003 в 2.

Добавлено: Вт май 05, 2015 13:30
Flasher
sa
Я же не зря написал про исходный пост. Там про порядок сортировки написано отнюдь не двусмысленно.

Добавлено: Вт май 05, 2015 14:22
sa
Flasher
Если порядок следует сохранять, то почему на FAT32 после вызова скрипта порядок не всегда сохраняется?

Добавлено: Вт май 05, 2015 14:52
Flasher
sa
Не получается воспроизвести на флешке с FAT32 на файлах 10001.1, 10002.2, 10003.3, 10004.4.
Или сама Windows на FAT32 стоит?

Добавлено: Вт май 05, 2015 15:10
sa
Flasher
Сначала в папке создай (скопируй) файл 10004.4, затем 10003.3 и т.д. После скрипта у меня получаются файлы 1.4, 2.3, 3.2, 4.1.

Добавлено: Вт май 05, 2015 15:42
a-dasler
Прошу прощения за отсутствие..
Да, порядок сортировки важен. Т.е. как есть.
Пронумерованные документы сканировались по порядку, сканер выдавал такой порядок:
1.*, а после следующие документы 10001.*, 10002.* и так далее по порядку.

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

Подправленный скрипт не тестировал, поэтому несоответствия не обнаружил. Меня устроил первый вариант скрипта. Ведь в папках и подпапках нигде не было файла 2.*.

Добавлено: Вт май 05, 2015 16:31
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.*.
ОК. Я это уже понял.

Добавлено: Вт май 05, 2015 16:47
sa
Flasher
Можно надеяться, что он и для непроблемных подходит?

Добавлено: Вт май 05, 2015 16:48
Flasher
sa
Можно не только надеяться, но и проверить. 8)
Add: часть кода вынес из процедуры.

Добавлено: Вт май 05, 2015 17:12
sa
Flasher
Запуск без параметров. Из тестового набора с именами 1, 2, 10001 после скрипта получились имена 3, 4, 5. Это верно?

Добавлено: Вт май 05, 2015 17:17
Flasher
sa
Да, при условии, что все расширения в папке одинаковые.

Добавлено: Вт май 05, 2015 23:08
sa
Flasher писал(а):Да,
Тогда остаётся надеяться, что я окажусь единственным, задавшим подобный вопрос и предположившим, что нумерация начнётся с 1 для случая, когда все файлы переименовываются (второй параметр скрипта отсутствует или равен 0).

Добавлено: Вт май 05, 2015 23:20
Flasher
sa
Будем надеяться. Можно, конечно, ещё подписать "Граждане, не задавайте глупых вопросов! Влючайте логику!". :D