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

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

Ответить
Настройки темы
[решено] обрезать по заданному MAX PATH

Старожил


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

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


есть список


я нашел как только обрезать длину файла. т.е.:


а нужно именно обрезать по длине пути т.е. уровнять MAX PATH


1. причем желательно:
чтобы я мог выбрать длину MAX PATH до которого нужно обрезать
(т.е. нужно не до 255 а скажем до 200 чтобы при копировании файлов в другое место был разбег для глубины)

2. и обязательно сохранение расширения файла.

3. как сделать чтобы захватывались для обработки длины MAX PATH только файлы с расширением txt ?

Отправлено: 11:57, 18-06-2010

 

Старожил


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

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


кто может помочь?

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

Последний раз редактировалось shadowbat, 18-06-2010 в 14:14.


Отправлено: 13:56, 18-06-2010 | #11



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

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


Аватара для kaster

Старожил


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

Профиль | Отправить 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
опять же, пробуй на свой страх и риск на тестовой файловой структуре с папками, подпапками и нужными файлами

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


Последний раз редактировалось kaster, 18-06-2010 в 15:00.


Отправлено: 14:44, 18-06-2010 | #12


Старожил


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

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


Цитата kaster:
shadowbat, а почему ты не хочешь изучить основы языка и самому реализовать такие простые вещи? тут главное нормально составить алгоритм и знать английский язык
кто сказал что не хочу? я изучаю, конечно не так быстро как хотелось бы.



Цитата kaster:
пробуй »
указываю путь и ничего не происходит. окно выбора папки закрывается и все. т.е. как будто скрипт должен сработать, но имена такие же как и были

Отправлено: 15:36, 18-06-2010 | #13


Аватара для kaster

Старожил


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

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


Цитата shadowbat:
я изучаю »
не в обиду сказано, но человек который действительно изучает, при виде ошибки делает как минимум 2 вещи
1. смотрит строчку с ошибкой, лезет в гугл/яндекс
2. открывает справку на предмет ошибочно написанной функции/процедуры.
с твоей стороны я наблюдаю обычный копипаст и удивленно круглые глаза, когда что-то не робит

так. теперь по сути.
Цитата shadowbat:
опять что то не так.. путь я указал »
это моя ошибка. вместо
Код: Выделить весь код
$aFolders = _FileListToArray($path, "*.txt", 2)
напиши
Код: Выделить весь код
$aFolders = _FileListToArray($path, "*", 2)
а по поводу путей, то там путь указывать не нужно. это всего лишь заголовок окна для указания папки.
Цитата shadowbat:
защита от дурака ? »
не только. если убрать MsgBox, то это ко всему прочему способ предотвратить работу скрипта при нажатии на кнопку Esc или Cancel при выборе папки и тем самым нежелательных действий.

Посмотри вот этот тред. Часть скрипта взята оттуда. Поможет понять основы рекурсивной обработки папок
Построение дерева каталогов

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


Отправлено: 15:48, 18-06-2010 | #14


Старожил


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

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


каждый профессионал в своем деле. или можно знать все и вся в любой момент времени по любой специализации..? профессионал бывает только в одной-двух областях. на любое познание требуется время. если Вы мне зададите вопрос по пережатию видео - я просто отвечу. мне будет уже приятно, что кому то помог.
после выбора папки вылетает (Line 16)

Отправлено: 15:56, 18-06-2010 | #15


Аватара для Creat0R

Must AutoIt


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

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


Цитата shadowbat:
вопрос - зачем тогда вписывать путь в скрипт? если он просит выбрать папку визуально через дерево папок »
Если указать путь вместо FileSelectFolder, то ничего просить не будет.

Цитата shadowbat:
а что, если не выбирать путь? а настроить чтобы скрипт сам брала путь из той папки где она находится »
Вот тот же пример, но функцию «_Renamer» я немного изменил, используется RegExp:

Код: Выделить весь код
#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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 15:59, 18-06-2010 | #16


Старожил


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

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


kaster, благодарю за помощь в этой теме
Creat0R, работает как часы.

рад, если кому то это решение тоже пригодится. (имеются ввиду будущие поколения )

РЕШЕНИЕ от Creat0R:
читать дальше »
Код: Выделить весь код
#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


Creat0R, а ты случайно не тот Creator, что участвует в разработке Opera AC ?
судя по твоим ссылкам в подписи - именно тот! пользуясь случаем хочу выразить неизмеримую благодарность. я на OAC второй год. и на другие браузеры пока даже смотреть не хочется. такого функционала как у OAC нигде нет, либо я пока не встречал

Последний раз редактировалось shadowbat, 18-06-2010 в 16:28.


Отправлено: 16:05, 18-06-2010 | #17


Аватара для kaster

Старожил


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

Профиль | Отправить 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

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


Последний раз редактировалось kaster, 18-06-2010 в 20:11.


Отправлено: 16:15, 18-06-2010 | #18


Старожил


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

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


Цитата kaster:
а так? »
после выбора папки скрипт открыл окно с листингом входящих папок. я нажал на крестик. он выдал новое окно с листингом внутренних папок еще глубже. итак мне на тестовом примере показалось 10 окошек. я их все закрыл а после этого скрипт выкинул каждый переименованный файл на уровень выше от первичного местонахождения, но уже переименованый

Отправлено: 16:22, 18-06-2010 | #19


Аватара для Creat0R

Must AutoIt


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

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


Цитата shadowbat:
ты случайно не тот Creator, что участвует в разработке Opera AC ? »
Тот

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:48, 18-06-2010 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Высокий приоритет заданному процессу 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




 
Переход