Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » текстовый файл с именами всех файлов в папке

Ответить
Настройки темы
текстовый файл с именами всех файлов в папке

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите пожалуйста составить код, который перечисляет в текстовом файле все файлы указанных папок.

То есть папок например может быть указано и три и семь.

Отправлено: 10:11, 03-02-2012

 

Аватара для apozlevich

Ветеран


Автор проектов


Сообщения: 1025
Благодарности: 180

Профиль | Отправить PM | Цитировать


Тогда надо использовать прямой доступ к секторам диска, вот это труъ труъ

-------
echo 127.0.0.1 google.ru >> %systemroot%\system32\drivers\etc\hosts && ipconfig /flushdns && echo Я ничего не трогал, оно само!

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:36, 16-02-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


apozlevich
1. сравни скорость
2. Сравни вывод. dir /B при маске "*.doc" выведет файлы "*.docx", а оно надо, для этого я введу "*.doc?" или "*.doc*" если это понадобится.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:12, 16-02-2012 | #12


Аватара для apozlevich

Ветеран


Автор проектов


Сообщения: 1025
Благодарности: 180

Профиль | Отправить PM | Цитировать


AZJIO, *.doc не выведет .docx, маска "*.doc" означает "все, что заканчивается на .doc" и .docx к этому не подходит. Кстати, у топикстартера нет задачи вывести по маске.
Скорость? Я даже моргнуть не успел, а dir уже отработал. Зато насколько меньше кода...

-------
echo 127.0.0.1 google.ru >> %systemroot%\system32\drivers\etc\hosts && ipconfig /flushdns && echo Я ничего не трогал, оно само!

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:16, 16-02-2012 | #13


Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16

Профиль | Отправить PM | Цитировать


вот
http://autoit-script.ru/index.php/topic,5259.0.html
я уже сталкивался с чем-то подобным... посмотри может пригодится...
Я периодически использую (немного видоизмененную под свои нужды)

-------
Одно дело искать сиюминутное решение, другое - искать знания...
вот и думай - что ты ищешь...

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:47, 17-02-2012 | #14


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


AZJlO
Такой лаконичный код, спасибо.

Но не работает маска по расширениям почему-то.
Код: Выделить весь код
#Include <FileOperations.au3>

$FileList =_FO_FileSearch('d:\Misc\', 'exe|jpg|png', True, 125, 1, 0)&@CRLF
;$FileList &=_FO_FileSearch('', '*', True, 125, 1, 0)&@CRLF

$FileList &=_FO_FileSearch('c:\windows', 'exe|jpg|png', True, 125, 1, 0)
$file = FileOpen(@ScriptDir&'\file.txt',2)
FileWrite($file, $FileList)
FileClose($file)
Выдает файл.тхт с двумя пустыми строчками.

Последний раз редактировалось socap, 17-02-2012 в 22:15.


Отправлено: 14:31, 17-02-2012 | #15


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


socap, должен работать, просто по умолчанию маска является полной, типа '*.exe|*.jpg|*.png', что позволяет использовать маску к примеру '*.in?|*.htm*|*.doc*'. Если необходимо использовать маску 'exe|jpg|png', то нужно указать параметр $iTypeMask=2 или $iTypeMask=0. Если что справка есть в самом UDF или здесь с подробным объяснением всех параметров, а они очень интересные (исключение/уровень вложенности/вид результата).
Там с UDF идёт в комплекте Gui, чтоб поиграть с параметрами. Вставляй путь, выбирай маску и смотри вывод.

Последний раз редактировалось AZJIO, 17-02-2012 в 23:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:06, 17-02-2012 | #16


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


AZJIO, а можно ли сделать маску исключения файлов по папкам?
То есть указываешь большую директорию (с кучей файлов и подпапок), исключаешь пару папок и файлы из исключенных папок в поиск не попадают?

И можно ли сделать маску по размеру файла?

Последний раз редактировалось socap, 18-02-2012 в 20:16.


Отправлено: 20:08, 18-02-2012 | #17


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Цитата socap:
И можно ли сделать маску по размеру файла? »
а это как? размер может быть либо больше определенного, либо меньше. а маска как будет работать?

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:57, 18-02-2012 | #18


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


Цитата socap:
AZJIO, а можно ли сделать маску исключения файлов по папкам? »
Можно, но не экономично получается, то есть заведомо тормозить выполнение сценария.
Например если добавить проверку в каждый запрос, то проверяется набор символов, при каждом запросе. Если сделать детект с помощью регулярного выражения, то скрипт будет обрабатывать этот каталог (холостой ход), потом вырезать ненужное. здесь специальную функцию лучше делать, дабы тем кому эта фича никогда не понадобилась не страдали.
Вообще такая UDF уже есть, смотри _RecFileListToArray в справке, по ссылке выше, но у неё недостаток в том, что она указывает папку, а не относительный путь к папке, то есть если указать в исключения 'папка1;папка2' то все эти папки будут игнорироваться, а обычно требуется исключить конкретную папку, а не одноимённые. И второй недостаток - используется с ключами $iReturn = 0 и $iRecur = 1, то есть возвращает папки и файлы.
Есть иной вариант _PathSearch, просто взять из неё регулярное выражение и с помощью него вырезать из результатов ненужные папки, примерно так

Код: Выделить весь код
#include <Array.au3> ; для _ArrayDisplay
#include <FileOperations.au3>

$FileList=_FO_FileSearch(@WindowsDir, 'exe|dll', True, 125, 0, 0, 0)

$FileList = _ExcludePaths($FileList, 'system32\*|Microsoft.NET\*|assembly\*|WinSxS\*|RegisteredPackages\*')
MsgBox(0, 'Сообщение', $FileList)
$FileList = StringSplit($FileList, @CRLF, 1)
_ArrayDisplay($FileList, UBound($FileList) & ' - RegExp')

; Получение списка и обработка регулярным выражением
Func _ExcludePaths($FileList, $Mask)
    $Mask = StringReplace(StringReplace(StringRegExpReplace($Mask, '[][$^.{}()+\\]', '\\$0'), '?', '.'), '*', '.*?')
    $FileList = StringRegExpReplace($FileList & @CRLF, '(?mi)^(' & $Mask & ')\r\n', '')
    $FileList = StringReplace(StringTrimRight($FileList, 2), '|', '')
    Return $FileList
EndFunc
Если в _FO_FileSearch вывод относительных путей, то и в маске функции _ExcludePaths указывать относительные пути. Если в _FO_FileSearch указать возврат полных путей, то и в _ExcludePaths указывать лучше полные. В любом случае лучше элемент маски завершать символами "\*" что исключит детект файлов. Это не экономичный вариант, исключаемая папка будет сканироваться.

Последний раз редактировалось AZJIO, 19-02-2012 в 05:48.

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:38, 19-02-2012 | #19


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


Цитата socap:
И можно ли сделать маску по размеру файла? »
Можно, есть даже функция от _FileFindEx от Ascend4nt. Насколько я понял она возвращает расширенную информацию о файле при каждом шаге поиске. Это работает быстрее нативных функций AutoIt3, которые сначала получают имя, а потом другими функциями можно получить атрибуты, размер и прочее.

Но в текущем варианте либо ручная правка UDF под свои запросы, либо результаты прогнать повторно в цикле, сравнивая с указанным размером. Для этого в начале получить данные в массив, потом проверить размеры и соответственно исключить
Код: Выделить весь код
; Проверяем равенство и исключаем данные
For $i = 1 To $aFileList[0]
    If FileGetSize($aFileList[$i])=34579 Then $aFileList[$i]=''
Next

; Объединяем массив в список
$FileList=''
For $i = 1 To $aFileList[0]
    If $aFileList[$i] Then $FileList &= $aFileList[$i] &@CRLF
Next
$FileList=StringTrimRight($FileList, 2) ; обрезаем последние 2 символа
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:42, 19-02-2012 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » текстовый файл с именами всех файлов в папке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Объединение всех файлов в папке AlexVong Скриптовые языки администрирования Windows 5 24-06-2015 23:34
Прочие - Как вывести список папок и файлов в текстовый файл? Vowan Программное обеспечение Windows 15 23-11-2013 15:29
CMD/BAT - [решено] как через батник получить список всех служб и их состояние в текстовый файл? Pozia Скриптовые языки администрирования Windows 3 22-11-2011 00:11
CMD/BAT - [решено] Как имена файлов расположенных в одной папке записать в текстовый файл? Nun-Nun Скриптовые языки администрирования Windows 6 12-05-2009 21:44
[решено] Импорт всех reg-файлов в папке? s127d Автоматическая установка Windows 2000/XP/2003 2 24-05-2008 05:11




 
Переход