Создание списка файлов выборочно по расширениям

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

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

Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Jonmey
Что-то я перемудрил с переносом строк.
Упростил скрипт по твоей задаче (исправил исходный пост).
Результат работы должен не измениться.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

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

Сообщение Flasher »

Tol!k писал(а):Можно и заменять. Сделать?
Да, отдельно тогда нарисуй, т. с.
Tol!k писал(а):Теоретически можно. Если не получится запихнуть в кнопку, батник устроит?
Если не получится, то, конечно, устроит.
Tol!k писал(а):Уникод или вин-1251 предпочтительнее?
Сложно сказать, всё от настроек реестра зависит. Ну, давай юникод.
Jonmey
Сообщения: 59
Зарегистрирован: Пн сен 27, 2010 14:01

Сообщение Jonmey »

Batya
Второй вариант скрипта работает также отлично как и первый.

А возможно сделать, чтобы в параметрах кнопки задавалось в каком формате выводить список - Unicode или Win-1251 (или ANSI, то есть равный локали системы)? И если файл со списком уже существует, то создавался новый файл? (например, если FileList.txt уже есть в целевой папке, то новый список записывался, например, в файл FileList2.txt и так по порядку).
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Jonmey писал(а):А возможно сделать, чтобы в параметрах кнопки задавалось в каком формате выводить список - Unicode или Win-1251 (или ANSI, то есть равный локали системы)?
В функции CreateTextFile третий параметр отвечает за кодировку создавемого файла: True - Unicode, False - ASCII.
Batya писал(а):FSO.CreateTextFile(TargetList, True, True).Write List
Jonmey писал(а):И если файл со списком уже существует, то создавался новый файл? (например, если FileList.txt уже есть в целевой папке, то новый список записывался, например, в файл FileList2.txt и так по порядку).
В конец скрипта добавь функцию:

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

Function NextName(pFilePath)
  Dim lPath, lName, lExt, li, lAdd
  Const lQ = 1 'Минимальное количество цифр в номере
  With CreateObject("Scripting.FileSystemObject")
    lPath = .GetParentFolderName(pFilePath)
    If lPath <> "" Then lPath = lPath & ""
    lName    = .GetBaseName(pFilePath)
    lExt     = .GetExtensionName(pFilePath)
    NextName = lPath & lName & lAdd & "." & lExt
    Do While .FileExists(NextName)
      li = li + 1
      If li < 10^lQ Then
        lAdd = Right(String(lQ, "0") & li, lQ)
      Else
        lAdd = li
      End If
      NextName = lPath & lName & lAdd & "." & lExt
    Loop
  End With
End Function
И исправь строку:
Batya писал(а):FSO.CreateTextFile(NextName(TargetList), True, True).Write List
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Batya писал(а):В функции CreateTextFile третий параметр отвечает за кодировку создавемого файла: True - Unicode, False - ASCII.
Там же проверка нужна для запуска с разных осей. Стационар тут не подходит.

Tol!k
Какие там дела с кнопкой?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Flasher писал(а):Там же проверка нужна для запуска с разных осей. Стационар тут не подходит.
Ты это для чего сказал?
Ты используешь скрипт? У тебя в каких-то случаях возникают ошибки?
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Batya писал(а):Ты это для чего сказал?
Для призыва поправить скрипт. Будто не понятно.
Batya писал(а):Ты используешь скрипт? У тебя в каких-то случаях возникают ошибки?
Первый, возможно, пригодится. Я его проверял только в одном месте. Работает. А что это меняет?
Jonmey
Сообщения: 59
Зарегистрирован: Пн сен 27, 2010 14:01

Сообщение Jonmey »

Batya
Скрипт отличный и работает чудесно, существенно упрощая ряд задач.

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

Сообщение Flasher »

Jonmey писал(а):существенно упрощая ряд задач
Например, каких?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Flasher писал(а):Для призыва поправить скрипт.
Flasher писал(а):Я его проверял только в одном месте. Работает.
Если всё работает, то зачем править?
С чего ты взял, что будут какие-то проблемы на различных ОС? Ты знаешь, как MS раскручивает используемый мной метод объекта FileSystemObject?
Думаю, что неопредлённые проблемы надо решать при их появлении, а не настраивать проблем, где их никогда не было.
Flasher писал(а):Например, каких?
У каждого могут быть свои узкоспециализированные задачи. "Будто не понятно."
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Batya писал(а):С чего ты взял, что будут какие-то проблемы на различных ОС?
Я ничего не брал, так задача была обрисована:
Jonmey писал(а):Unicode или Win-1251 (или ANSI, то есть равный локали системы)
Batya писал(а):Ты знаешь, как MS раскручивает используемый мной метод объекта FileSystemObject?
Ну, расскажи. Зачем было писать про два режима подхвата кодировки, если с единожды указанным всё будет работать аналогично?
Batya писал(а):У каждого могут быть свои узкоспециализированные задачи. "Будто не понятно."
Совершенно очевидно, что непонятно, иначе бы не спрашивал. Или мне запрещается для себя найти в этом какую-то пользу? Вопрос адресован другому, заметь. Дай возможность ему и ответить. Если предложишь способы того, где и как подобные списки можно использовать, буду признателен.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Flasher писал(а):Batya писал(а):
Ты знаешь, как MS раскручивает используемый мной метод объекта FileSystemObject?
Ну, расскажи. Зачем было писать про два режима подхвата кодировки, если с единожды указанным всё будет работать аналогично?
Я тоже не знаю. Поэтому и спрашиваю у тебя, есть ли живые примеры различных вариантов работы.
А так как меня спросили, я привел ответ из справки:
object.CreateTextFile(filename[, overwrite[, unicode]])
...
unicode
Optional. Boolean value that indicates whether the file is created as a Unicode or ASCII file. The value is true if the file is created as a Unicode file, false if it's created as an ASCII file. If omitted, an ASCII file is assumed.
Возможно, для вопрошающего это именно то, что нужно.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Batya
Есть одна ось с юникодом, когда появится возможность выйти на неё, проверю с опущенным третьим параметром.
Jonmey
Сообщения: 59
Зарегистрирован: Пн сен 27, 2010 14:01

Сообщение Jonmey »

Про ANSI я упомянул, поскольку не знал, как проще сделать в скрипте - задать кодировку жестко или не жестко (согласно локали), но при этом чтобы была возможность перехода на Unicode. Меня устраивало оба варианта, но конечное решение я оставил за программистом.

Скрипт используется в системе бэкапов и восстановления, поскольку (как это ни странно) ни один из четырех мне известных плагинов для TC, создающих списки файлов, не создает списки такого вида (видимо из-за стремления авторов уменьшить размер конечного файла). А пользоваться штатными средствами ТС для этого крайне неудобно (по крайней мере, если это приходится делать регулярно).
Конечно, если задаться целью, то наверняка можно найти стороннюю утилиту, создающую подобные списки, но ее использование будет существенно менее удобным чем скрипт.
Ответить