|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] обрезать по заданному MAX PATH |
|
[решено] обрезать по заданному MAX PATH
|
Старожил Сообщения: 267 |
Профиль | Отправить PM | Цитировать есть список
я нашел как только обрезать длину файла. т.е.: а нужно именно обрезать по длине пути т.е. уровнять MAX PATH 1. причем желательно: чтобы я мог выбрать длину MAX PATH до которого нужно обрезать (т.е. нужно не до 255 а скажем до 200 чтобы при копировании файлов в другое место был разбег для глубины) 2. и обязательно сохранение расширения файла. 3. как сделать чтобы захватывались для обработки длины MAX PATH только файлы с расширением txt ? |
|
Отправлено: 11:57, 18-06-2010 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать кто может помочь?
вроде процедура стандартная. так сказать основополагающая. любой кто сталкивался с длинными именами должен иметь у себя в заначке методы работы с ними, как например обрезка по заданной длине... |
Последний раз редактировалось shadowbat, 18-06-2010 в 14:14. Отправлено: 13:56, 18-06-2010 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать shadowbat, а почему ты не хочешь изучить основы языка и самому реализовать такие простые вещи? тут главное нормально составить алгоритм и знать английский язык
попробуй вот так #include <file.au3> $MAX_PATH = 200 Global $sFolder = FileSelectFolder("Choose folder to processing", ""); Путь до папки содержащий файлы, которые надо обрезать ;Exit If @error Then MsgBox(48, 'Warning', 'The folder hasn''t been chosen. Script will be shut down now.', 3) Exit EndIf _Main($sFolder) Func _Main($path) $aFiles = _FileListToArray($path, "*.txt", 1) $aFolders = _FileListToArray($path, "*.txt", 2) If Not IsArray($aFiles) AND Not IsArray($aFolders) Then Return "" ;No files/folders found EndIf For $j = 1 to $aFolders[0] $newpath = $path & '\' & $aFolders[$j] _Main($newpath) Next For $i = 1 to $aFiles[0] $sLongName = $path & '\' & $aFiles[$i] _Renamer($sLongName) Next EndFunc Func _Renamer($name) $name_NoExt = StringTrimRight($name, 4); Название без расширения $name_Ext = StringRight($name, 3); Расширение $newname_NoExt = StringLeft($name_NoExt, $MAX_PATH); Обрезаем название файла без расришения до длины MAX_PATH $newname = $newname_NoExt & "." & $name_Ext; Добавляем расширение FileMove($name, $newname);Переименовывем файл EndFunc |
------- Последний раз редактировалось kaster, 18-06-2010 в 15:00. Отправлено: 14:44, 18-06-2010 | #12 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать Цитата kaster:
Цитата kaster:
|
||
Отправлено: 15:36, 18-06-2010 | #13 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать Цитата shadowbat:
1. смотрит строчку с ошибкой, лезет в гугл/яндекс 2. открывает справку на предмет ошибочно написанной функции/процедуры. с твоей стороны я наблюдаю обычный копипаст и удивленно круглые глаза, когда что-то не робит так. теперь по сути. Цитата shadowbat:
напиши а по поводу путей, то там путь указывать не нужно. это всего лишь заголовок окна для указания папки. Цитата shadowbat:
Посмотри вот этот тред. Часть скрипта взята оттуда. Поможет понять основы рекурсивной обработки папок Построение дерева каталогов |
|||
------- Отправлено: 15:48, 18-06-2010 | #14 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать каждый профессионал в своем деле. или можно знать все и вся в любой момент времени по любой специализации..? профессионал бывает только в одной-двух областях. на любое познание требуется время. если Вы мне зададите вопрос по пережатию видео - я просто отвечу. мне будет уже приятно, что кому то помог.
после выбора папки вылетает (Line 16) |
Отправлено: 15:56, 18-06-2010 | #15 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата shadowbat:
Цитата shadowbat:
#include <File.au3> Global $MAX_PATH = 150 Global $sFolder = @ScriptDir ; Путь до папки содержащий файлы, которые надо обрезать _Main($sFolder) Func _Main($sPath) $aFiles = _FileListToArray($sPath, "*.txt", 1) $aFolders = _FileListToArray($sPath, "*", 2) If Not IsArray($aFiles) And Not IsArray($aFolders) Then Return "" ;No files/folders found EndIf For $j = 1 To UBound($aFolders)-1 _Main($sPath & '\' & $aFolders[$j]) Next For $i = 1 To UBound($aFiles)-1 _Renamer($sPath & '\' & $aFiles[$i]) Next EndFunc Func _Renamer($sFile) $sNewFile = StringRegExpReplace($sFile, '(.{' & $MAX_PATH & '}).*(\.[^\.]*$)', '\1\2'); Обрезаем название файла без расришения до длины MAX_PATH FileMove($sFile, $sNewFile) ;Переименовывем файл EndFunc |
||
------- Отправлено: 15:59, 18-06-2010 | #16 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать kaster, благодарю за помощь в этой теме
Creat0R, работает как часы. рад, если кому то это решение тоже пригодится. (имеются ввиду будущие поколения ) РЕШЕНИЕ от Creat0R: Creat0R, а ты случайно не тот Creator, что участвует в разработке Opera AC ? судя по твоим ссылкам в подписи - именно тот! пользуясь случаем хочу выразить неизмеримую благодарность. я на OAC второй год. и на другие браузеры пока даже смотреть не хочется. такого функционала как у OAC нигде нет, либо я пока не встречал |
Последний раз редактировалось shadowbat, 18-06-2010 в 16:28. Отправлено: 16:05, 18-06-2010 | #17 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать shadowbat
а так? #include <file.au3> #include <array.au3> $MAX_PATH = 200 Global $sFolder = FileSelectFolder("Choose folder to processing", ""); Путь до папки содержащий файлы, которые надо обрезать ;Exit If @error Then MsgBox(48, 'Warning', 'The folder was''nt been chosen. Script will be shut off now.', 3) Exit EndIf ;MsgBox(0, '', $sFolder) _Main($sFolder) Func _Main($path) ConsoleWrite($path & @CRLF) $aFiles = _FileListToArray($path, "*.txt", 1) $aFolders = _FileListToArray($path, "*", 2) If IsArray($aFolders) Then For $j = 1 to $aFolders[0] $newpath = $path & '\' & $aFolders[$j] _Main($newpath) Next EndIf If IsArray($aFiles) Then For $i = 1 to $aFiles[0] $sLongName = $path & '\' & $aFiles[$i] _Renamer($sLongName) Next EndIf If Not IsArray($aFiles) AND Not IsArray($aFolders) Then Return "" ;No files/folders found EndIf EndFunc Func _Renamer($name) $name_NoExt = StringTrimRight($name, 4); Название без расширения $name_Ext = StringRight($name, 3); Расширение $newname_NoExt = StringLeft($name_NoExt, $MAX_PATH); Обрезаем название файла без расришения до длины MAX_PATH $newname = $newname_NoExt & "." & $name_Ext; Добавляем расширение FileMove($name, $newname);Переименовывем файл EndFunc |
------- Последний раз редактировалось kaster, 18-06-2010 в 20:11. Отправлено: 16:15, 18-06-2010 | #18 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать Цитата kaster:
|
|
Отправлено: 16:22, 18-06-2010 | #19 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата shadowbat:
|
|
------- Отправлено: 16:48, 18-06-2010 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Высокий приоритет заданному процессу | 7human7 | Скриптовые языки администрирования Windows | 14 | 26-01-2012 16:34 | |
CMD/BAT - [решено] обрезать по заданному MAX PATH | shadowbat | Скриптовые языки администрирования Windows | 17 | 08-07-2010 06:04 | |
Удаление записей из таблицы по заданному времени на php | magwolf | Вебмастеру | 5 | 14-08-2009 14:13 | |
Win2003 и Max CPUID max to 3 | 3au4er | Microsoft Windows NT/2000/2003 | 0 | 06-08-2008 12:13 | |
Поиск элементов массива, чья сумма равна заданному числу | Qwe1 | Программирование и базы данных | 28 | 26-09-2006 03:31 |
|