|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Последовательная работка файлов из подпапок |
|
Последовательная работка файлов из подпапок
|
Новый участник Сообщения: 35 |
Приветствую ! Поделитесь пожалуйста куском кода если у кого есть.
Требуется следующее: имеется папка внутри которой подпапки с файлами (например txt), структура вложений может быть большой. Нужно последовательно обработать каждый файл и сохранить в "родной" папке но с другим названием. |
|
Отправлено: 12:18, 02-04-2009 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать пример получения подкаталогов с файлами по маске.
легко можно встроить необходимую обработку )) |
------- Отправлено: 16:47, 02-04-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать А как сделать последовательную обработку файлов из этого списка ? В циклах недопонимаю как правильно сделать. Подскажите ?
|
Отправлено: 07:53, 09-04-2009 | #3 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать Global $sStartDirPath = @WindowsDir & '\help' Local $sEndDirPath = 'c:\help\' ToolTip('Пожалуйста, подождите...', 10, 70, 'Поиск файлов') Local $aFilesPath = _GetDirsFilesList($sStartDirPath, '*', 1) _EditAndCopyFiles($aFilesPath, $sEndDirPath) ToolTip('Готово' & @CRLF & 'Результат в папке: ' & $sEndDirPath, 10, 70, 'Поиск и копирование файлов') Sleep(3000) Func _EditAndCopyFiles($aFilesPath, $sDirDest) ;~ В эту функцию вставивайте необходимую обработку. $sDirDest = StringRegExpReplace($sDirDest, '\\+$', '') Local $i, $sNewFileName, $sNewFileType, $sNewFileDirPath ToolTip('Всего файлов: ' & $aFilesPath[0], 10, 70, 'Копирование файлов') For $i=1 To $aFilesPath[0] $sNewFileName = StringRegExpReplace($aFilesPath[$i], '.+\\(.+)', '\1') $sNewFileType = StringRegExpReplace($sNewFileName, '.+\.(.+)', '\1'); новое расширение файла $sNewFileName = StringReplace($sNewFileName, '.' & $sNewFileType, '') & ' 2'; новое имя файла $sNewFileDirPath = $sDirDest & StringReplace($aFilesPath[$i], $sStartDirPath, '') $sNewFileDirPath = StringRegExpReplace($sNewFileDirPath, '(.+)\\.+', '\1'); новая папка файла ToolTip('Всего файлов: ' & $aFilesPath[0] & @CRLF & _ 'Копируется файл: ' & $i & @CRLF & _ 'Из: ' & $aFilesPath[$i] & @CRLF & _ 'В: ' & $sNewFileDirPath & '\' & $sNewFileName & '.' & $sNewFileType, _ 10, 70, 'Копирование файлов') FileCopy($aFilesPath[$i], $sNewFileDirPath & '\' & $sNewFileName & '.' & $sNewFileType, 1+8); копирование с заменой файлов и созданием + создавать соответствующую структуру папок получателя, если ее нет Next EndFunc Func _GetDirsFilesList($sStartDirPath, $sFilesMask, $iAddFiles=1, $iAddDirs=0, $sRootPath=1) $sStartDirPath = StringRegExpReplace($sStartDirPath, '\\+$', '') Local $aRetArray[1], $aSubDirsArr, $sFindNextFile, $sCurrentPath, $iYesAdd Local $sFindFirstFile = FileFindFirstFile($sStartDirPath & '\' & $sFilesMask) If @error = 1 Then Return SetError(-1); нет искомых файлов If $sRootPath == 1 AND $iAddDirs == 1 Then $aRetArray[0] += 1 ReDim $aRetArray[2] $aRetArray[1] = $sStartDirPath EndIf While 1 $sFindNextFile = FileFindNextFile($sFindFirstFile) If @error = 1 Then ExitLoop $sCurrentPath = $sStartDirPath & '\' & $sFindNextFile $iYesAdd = 0 If StringInStr(FileGetAttrib($sCurrentPath), 'D') Then If $iAddDirs == 1 Then $iYesAdd = 1 Else If $iAddFiles == 1 Then $iYesAdd = 1 EndIf If $iYesAdd == 1 Then $aRetArray[0] += 1 ReDim $aRetArray[$aRetArray[0]+1] $aRetArray[$aRetArray[0]] = $sCurrentPath EndIf $aSubDirsArr = _GetDirsFilesList($sCurrentPath, $sFilesMask, $iAddFiles, $iAddDirs, 0) If IsArray($aSubDirsArr) Then For $i = 1 To $aSubDirsArr[0] $aRetArray[0] += 1 ReDim $aRetArray[$aRetArray[0]+1] $aRetArray[$aRetArray[0]] = $aSubDirsArr[$i] Next EndIf WEnd FileClose($sFindFirstFile) SetError(0) Return $aRetArray EndFunc |
------- Отправлено: 08:46, 09-04-2009 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать еще вариант с фильтром по регулярному выражению:
#include <array.au3> Dim $a _GetFileList ($a, "C:\TEST", "(?i)\.TXT$") _ArrayDisplay($a) Func _GetFileList (ByRef $array, $root, $regExp = ".*") If IsArray($array)=0 Then Dim $array[1]=[0] Local $search = FileFindFirstFile($root &"\*"), $file While 1 $file = $root & "\" & FileFindNextFile($search) If @error Then ExitLoop If StringInStr(FileGetAttrib($file), 'D') Then _GetFileList ($array, $file, $regExp) ElseIf StringRegExp($file, $regExp) Then $array[0]+=1 ReDim $array[$array[0]+1] $array[$array[0]]=$file EndIf WEnd EndFunc Цитата Lodoss:
|
||
Отправлено: 12:12, 09-04-2009 | #5 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Под "обработкой" я написал в самом начале, требуется открыть последовательно каждый файл, (для пример я привёл тхт), правим его (добавляем пару строк в конце) и сохраняем в родной папке но с другим названием.
В примерах разбираюсь, для меня циклы и массивы пока тёмный лес ![]() |
Отправлено: 12:40, 09-04-2009 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Lodoss, приведите пример обработки одного файла (без циклов и массивов) чтобы было от чего плясать: открытие файла -> преобразование -> формирование нового имени -> сохранение (переделать его для массива дело техники) или с этим тоже проблемы?.. тогда формулируйте детально весь алгоритм обработки файла - какие строки добавляются, имя нового файла, что делать со старым и т.д.
|
Отправлено: 13:47, 09-04-2009 | #7 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать Lodoss......amel27, дело говорит....
а по поводу массивов и циклов - почитайте справку, русскую справку, разделы "Применение AutoIt" и "Для новичка".... а далее уже по всем функциям, обязательно на практике разбирая каждый пример... потом еще удивитесь - как все легко ))) |
------- Отправлено: 13:53, 09-04-2009 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Удаление Папки и всех подпапок и файлов | sashok60 | Скриптовые языки администрирования Windows | 16 | 02-03-2016 08:54 | |
CMD/BAT - [решено] удаление всех файлов и подпапок в нескольких папках | alexandri | Скриптовые языки администрирования Windows | 18 | 12-01-2010 05:33 | |
Запускальщик программ из подпапок папки | truvo | Хочу все знать | 1 | 26-06-2009 19:16 | |
В OpenOffice Writer нумерация страниц не последовательная | Coutty | Программное обеспечение Linux и FreeBSD | 4 | 06-05-2008 10:20 | |
Последовательная установка EXE'шников.... | Han_Solo | Хочу все знать | 10 | 02-06-2007 22:40 |
|