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

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

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

Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):Хм. Окно должно исчезать автоматически. Галка на "в свёрнутом виде" стоит?
Пардон, просто батник работает в 10 раз медленнее, чем скрипт. Поэтому окно в трее, на долго зависло. За ссылку на скрипт, Спасибо.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):просто батник работает в 10 раз медленнее
Просто скрипт в процессе никак о своей работе знать не даёт в отличии от батника, поэтому так кажется. Можно окно консоли вообще скрыть, и разница не будет столь ощутима.
onfirmaton
Сообщения: 7
Зарегистрирован: Пн янв 31, 2011 05:07

Сообщение onfirmaton »

Скрипт от "Tol!k" (Пт Янв 28, 2011 14:04) работает,

но хотелось бы добавить к списку "тяжелых" (>300-500mb) файлов CRC сумму,
для возможности последующей проверки "битости" файлов,

а также такие мелочи, как размер в байтах, время, т.д.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

onfirmaton
Здесь замени кусок

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

:hashs
>>%1 rhash.exe -p %%p;%%s;%%C;%%{mtime};\n %2
goto :eof
:header
>%1 echo File;Size;CRC32;Last modification;
goto :eof
onfirmaton
Сообщения: 7
Зарегистрирован: Пн янв 31, 2011 05:07

Tol!k

Сообщение onfirmaton »

СПС !!!
пошел пробовать,

а где б чаво-нибудь по этому языку скриптов полистать ?

чтоб по пустякам не морочить другим голову,

вроде немного смахивает на VBasic , но и чем-то отличается...
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

Вот и выросло поколение...
Начать можно отсюда: http://habrahabr.ru/blogs/windows/60604/, а дальше - Гугл в помощь... Ну, и команду help в консоли никто не отменял.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

1. А синтаксис в скриптах используется исключительно дельфийский?
2. вроде немного смахивает на VBasic
3. ... :?:

Продолжение следует... :D
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Каким образом модифицировать эту команду, чтобы получался список файлов в юникоде?
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

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

TOTALCMD#BAR#DATA
%comspec% /c for /f "delims=" %$ in ('type
%WL') do %%comspec%% /u /c "(dir/b/s/on/a-d "%%$"&echo:)>>"%Tlist.lst""
%commander_path%\totalcmd.exe,24
всё выделенное >> список с полными путями в UTF-16

1
-1

Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Tol!k
Спасибо.
Заметил, что обрабатываются не только выделенные файлы, но и вообще все файлы в подкаталогах того каталога, где лежат выделенные файлы, и если находятся совпадающие имена, то они тоже добавляются в список. Это ограничение можно обойти?
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

если находятся совпадающие имена, то они тоже добавляются в список.
исправление для http://wincmd.ru/forum/viewpost.php?p=73323

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

@echo off &setlocal enableextensions &chcp 1251 >nul

rem   Пример параметров: "%L" "%Tlist.lst"
rem                    : "%L"

if "%~2"=="" (set list=list.lst) else set "list=%~2"
cd. >"%list%"
if "%~1"=="" (dir /b/s/on/a-d >>"%list%" &goto :p)
findstr /vec:"\\" "%~1" >>"%list%"
for /f "delims=" %%d in ('findstr /ec:"\\" "%~1"') do dir /b/s/on/a-d "%%d" >>"%list%"
:p
set "p$="
cd. >"%list%.tmp"
for /f "usebackq delims=" %%f in ("%list%") do call :s "%%f"
move /y "%list%.tmp" "%list%"
goto :eof

:s
if not "%p$%"=="%~dp1" echo:>>"%list%.tmp"
set "f$=%~1"
>>"%list%.tmp" echo %f$:&=^&%
set "p$=%~dp1"
goto :eof
юникод не обещаю
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Tol!k
Спасибо.

Немного модифицировал скрипт, сделал его более универсальным и многовариантым.
Запостю и здесь, может кому ещё пригодится.

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

'================================================================
' Create Filelist
' Створення списку файлів
' Создание списка файлов
'================================================================
' Parameters / Параметры / Параметри:
' 1: {files or directory}/{файли або каталог}/{файлы или каталог}
' 2: {filelist}/{підсумковий файл-список}/{итоговый файл-список}
' 3: {recursive path | 1 or 0}
'    {рекурсивний список (включаючи підкаталоги) | 1 або 0}
'    {рекурсивный список (включая подкаталоги) | 1 или 0}
' 4: {relative path | 1 or 0}
'    {відносні шляхи | 1 або 0}
'    {относительные пути | 1 или 0}
' 5: {new filelist each time | 1 or 0}
'    {новий список кожного разу | 1 або 0}
'    {новый список каждый раз | 1 или 0}
'================================================================
' Якщо перший параметр - шлях до каталогу, то обробляється
'   тільки цей каталог, при цьому він вважається активним.
' Если первый параметр - путь к каталогу, то обрабатывается
'    только этот каталог, причём он считается активным.
'================================================================
' Якщо для параметра {файл-список} не вказано повний шлях,
'   то файл-список створюється в активному каталозі.
' Если для параметра {файл-список} не указан полный путь,
'   то файл-список создаётся в активном каталоге.
'================================================================
' При рекурсивній обробці (третій параметр = 1) обробляються
'   також всі файли і підкаталоги виділених каталогів.
' При рекурсивной обработке (третий параметр = 1) обрабатываются
'   также все файлы и подкаталоги выделенных каталогов.
'================================================================
' При релятивній обробці (четвертий параметр = 1) шляхи до файлів
'   в списку файлів вказуються відносно активного каталогу.
' При рекурсивной обработке (четвёртый параметр = 1) пути к файлам
'   в списке файлов указываются относительно активного каталога.
'================================================================
' Якщо п'ятий параметр дорівнює 0, то підсумковий файл-список
'   буде перезаписуватись; якщо 1 - створюватися новий
' Если пятый параметр равен 0, то итоговый файл-список
'   будет перезаписываться; если 1 - создаваться новый
'================================================================
' У функції CreateTextFile третій параметр відповідає за кодування
'   створюємого файлу: True - Unicode, False - ASCII.
' В функции CreateTextFile третий параметр отвечает за кодировку
'   создаваемого файла: True - Unicode, False - ASCII.
'================================================================
' Examples / Приклади / Примеры:
' %L "c:\path\Filelist.lst" 1 1 1
' %P%N Filelist.lst 0 0 0
'================================================================
' Script:        FileListDreamLair.vbs
' Author:        Batya & LonerD
' Build:        1.4 (2012.08.27)
' OfSite:        http://dreamlair.net
'================================================================

Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
Cnt = WScript.Arguments.Count
If Cnt < 4 Then Wscript.Quit

With WScript.Arguments
  FF = .Item(0) : TargetList = .Item(1) : Recursive = .Item(2) : Relative = .Item(3) : NewFile = .Item(4)
End With

FolderMode = FSO.FolderExists(FF)
If FolderMode Then
  CurrentFolder = FF
Else
  CurrentFolder = CreateObject("WScript.Shell").CurrentDirectory
End If
If Right(CurrentFolder, 1) <> "\" Then CurrentFolder = CurrentFolder & "\"
LenCF = Len(CurrentFolder)

If InStr(TargetList, ":") = 0 Then TargetList = CurrentFolder & TargetList

If FolderMode Then
  List = Process(CurrentFolder)
Else
  With FSO.OpenTextFile(FF, 1)
    Do While Not .AtEndOfStream
      F = .ReadLine : List = List & Process(F)
    Loop
  End With
End If

If NewFile = 1 Then TargetList = NextName(TargetList) 
FSO.CreateTextFile(TargetList, True, True).Write List

Set FSO = Nothing : Wscript.Quit()

Function Process(pPath)
  If FSO.FileExists(pPath) Then Process = Cut(pPath) & vbNewLine
  If FSO.FolderExists(pPath) Then
    If Recursive = 0 Then
      Process = Cut(pPath) & vbNewLine
      Else
      For Each lF in FSO.GetFolder(pPath).Files
        Process = Process & Cut(lF) & vbNewLine
      Next
      For Each lF in FSO.GetFolder(pPath).SubFolders
        Process = Process & Process(lF)
      Next
    End If
  End If
End Function

Function Cut(pPath) 
  Cut = FSO.GetAbsolutePathName(pPath) 
  If Relative = 1 Then Cut = Mid(Cut, LenCF + 1) 
End Function

Function NextName(pFilePath)
  Const lQ = 2 'Мінімальна кількість цифр в номері
  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 за советы.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Вопросы по скрипту из предыдущего поста.
1. Каким образом в создаваемый список можно добавить файлы, у которых имена в юникоде? Сейчас такие файлы просто пропускаются скриптом.
2. Каким образом можно создавать список в формате UTF-8 ?
Сейчас если указать в команде CreateTextFile третий параметр True - создаётся файл в формате UTF-16 LE
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

LonerD
1. В каком юникоде? Если в UTF-16 LE, то см. мои скрипты с %WL (For Each F in Split..).
2. Странный вопрос. Открыть в текстовом редакторе, сохранить в UTF-8. В ТС - %UL.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить