![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » текстовый файл с именами всех файлов в папке |
|
текстовый файл с именами всех файлов в папке
|
Новый участник Сообщения: 6 |
Помогите пожалуйста составить код, который перечисляет в текстовом файле все файлы указанных папок.
То есть папок например может быть указано и три и семь. |
|
Отправлено: 10:11, 03-02-2012 |
Ветеран Сообщения: 1025
|
Профиль | Отправить PM | Цитировать Тогда надо использовать прямой доступ к секторам диска, вот это труъ труъ
|
------- Отправлено: 12:36, 16-02-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 265
|
Профиль | Отправить PM | Цитировать apozlevich
1. сравни скорость 2. Сравни вывод. dir /B при маске "*.doc" выведет файлы "*.docx", а оно надо, для этого я введу "*.doc?" или "*.doc*" если это понадобится. |
Отправлено: 13:12, 16-02-2012 | #12 |
Ветеран Сообщения: 1025
|
Профиль | Отправить PM | Цитировать AZJIO, *.doc не выведет .docx, маска "*.doc" означает "все, что заканчивается на .doc" и .docx к этому не подходит. Кстати, у топикстартера нет задачи вывести по маске.
Скорость? Я даже моргнуть не успел, а dir уже отработал. Зато насколько меньше кода... |
------- Отправлено: 13:16, 16-02-2012 | #13 |
![]() Старожил Сообщения: 301
|
Профиль | Отправить PM | Цитировать вот
http://autoit-script.ru/index.php/topic,5259.0.html я уже сталкивался с чем-то подобным... посмотри может пригодится... Я периодически использую (немного видоизмененную под свои нужды) |
------- Отправлено: 12:47, 17-02-2012 | #14 |
Новый участник Сообщения: 6
|
Профиль | Отправить 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 |
Старожил Сообщения: 265
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать AZJIO, а можно ли сделать маску исключения файлов по папкам?
То есть указываешь большую директорию (с кучей файлов и подпапок), исключаешь пару папок и файлы из исключенных папок в поиск не попадают? И можно ли сделать маску по размеру файла? |
Последний раз редактировалось socap, 18-02-2012 в 20:16. Отправлено: 20:08, 18-02-2012 | #17 |
![]() Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать Цитата socap:
|
|
------- Отправлено: 22:57, 18-02-2012 | #18 |
Старожил Сообщения: 265
|
Профиль | Отправить PM | Цитировать Цитата socap:
Например если добавить проверку в каждый запрос, то проверяется набор символов, при каждом запросе. Если сделать детект с помощью регулярного выражения, то скрипт будет обрабатывать этот каталог (холостой ход), потом вырезать ненужное. здесь специальную функцию лучше делать, дабы тем кому эта фича никогда не понадобилась не страдали. Вообще такая 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 |
|
Последний раз редактировалось AZJIO, 19-02-2012 в 05:48. Отправлено: 05:38, 19-02-2012 | #19 |
Старожил Сообщения: 265
|
Профиль | Отправить PM | Цитировать Цитата socap:
Но в текущем варианте либо ручная правка 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|