Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: arr1val
Дата сообщения: 06.03.2008 15:15
Maza Faka
в этом случае он будет мувить файлы только из корня цэ, а задача именно в том, чтоб он собрал допустим док файлы со всех директорий диска.
Автор: ViSiToR
Дата сообщения: 06.03.2008 16:13
arr1val

Цитата:
все файлы *.док с диска цэ переместить в опр папку.

FileMove/Copy поддерживают такие фильтры (a.k.a wildcards):


Код: FileMove("c:\*.док", "d:\*.док")
Автор: arr1val
Дата сообщения: 06.03.2008 17:09
ViSiToR
в этом случае он будет мувить файлы только из корня цэ, а задача именно в том, чтоб он собрал допустим док файлы со всех директорий диска. т.е. вообще все док файлы с винта он мне засунул в одну папку.
Автор: ViSiToR
Дата сообщения: 06.03.2008 23:22
arr1val
Чтобы далеко не ходить, вот пример с использованием ком. строки:


Код:
Run(@ComSpec & ' /c For /R "c:\" %i In (*.doc) Do Move "%i" "d:\Docs\%~nxi"', '', @SW_HIDE)
Автор: arr1val
Дата сообщения: 07.03.2008 10:15
ViSiToR
спасибо !
Автор: arr1val
Дата сообщения: 07.03.2008 17:47
ViSiToR
если не затруднит, хотелось бы понять что за ключики...Искал по хелпам ничего не нашел, да и вообще честно говоря с трудом понимаю как этот скрипт работает (Если возможно списаться в аське)
Автор: ViSiToR
Дата сообщения: 07.03.2008 18:24
arr1val

Цитата:
хотелось бы понять что за ключики

Всё это расписано для команды For в консоли командной строки (Cmd.exe -> For /?).
Автор: Maza Faka
Дата сообщения: 08.03.2008 06:54
arr1val
Тебе сюда
Автор: NORIO
Дата сообщения: 15.03.2008 01:15
Возможно ли получить с помощью StringRegExp найденный по образцу фрагмент текста,
а не просто подтверждение что он найден?

Добавлено:
И ещё. При выполнении определённой функции образуется массив каждый раз с разным количеством элементов.
Как наименее муторным способом вывести весь массив в текстовый элемент интерфейса например в многострочное текстовое поле?
Автор: ViSiToR
Дата сообщения: 15.03.2008 08:09
NORIO

Цитата:
Возможно ли получить с помощью StringRegExp найденный по образцу фрагмент текста,
а не просто подтверждение что он найден?

Возможно, что конкретно интересует?


Цитата:
вывести весь массив в текстовый элемент интерфейса


Код: #include <GuiConstants.au3>

Global $avArray[4] = [3, "Some Data", "More Data", "And Final Data "]

$GUI = GUICreate("Test Script", 300, 200)

$Set_Edit_Data = GUICtrlCreateButton("Set Data", 20, 10, 60, 20)

$Edit = GUICtrlCreateEdit("", 20, 40, 260, 140)

GUISetState(@SW_SHOW, $GUI)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case
$Set_Edit_Data
Local $sData = ""

For $i = 1 To Ubound($avArray)-1
$sData &= $avArray[$i] & @CRLF
Next

GUICtrlSetData($Edit, $sData)
EndSwitch
WEnd
Автор: Maza Faka
Дата сообщения: 15.03.2008 08:15
NORIO

Цитата:
Возможно ли получить с помощью StringRegExp найденный по образцу фрагмент текста,
а не просто подтверждение что он найден?

Смотрим справку:

Цитата:
0 Returns 1 (matched) or 0 (no match)
То есть
Цитата:
просто подтверждение что он найден


Цитата:
1 Return array of matches
Возвращает массив найденого совпадения

Цитата:
2 Return array of matches including the full match (Perl / PHP style).
Возвращает массив всех найденных совпадений.

Код: #include <Array.au3> ;Только для показа массива

Dim $string = "Autoit rulez forever, i love AutoIt"
Dim $result

$result
= StringRegExp($string, "(?i)autoit", 1) ;Ищем одно совпадение

MsgBox(0, "Msg", $result[0])

$result = StringRegExp($string, "(?i)autoit", 3) ;Ищем все совпадения

_ArrayDisplay($result)
Автор: zero1632
Дата сообщения: 15.03.2008 10:12
1. Подскажите, есть такая вещь как IniReadSection.
Почему-то в хелпе написано, что для совместимости с win98 будет считано только 32767 символов раздела. А если у меня больше? И мне вовсе не нужна совместимость с win98, или он считывает 32767 байт только если операционка win98?

2. Как пограмотней из полного имени файла вытащить название его расширения?
то есть из piture.jpg вытащить, что это именно jpg?

3.Каким образом можно искать слова в word'овских и rtf файлах? Понятно, что английские слова скорее всего можно найти через StringRegExp б а что делать с русскими (unicode?) доками? Есть же _WordDocOpen, но так и не разобрался, как именно она будет работать, и имеет смысл это делать. (записывать весь дос в txt файл(?) а потом читать его?)
Автор: ViSiToR
Дата сообщения: 15.03.2008 11:08
zero1632

Цитата:
А если у меня больше? И мне вовсе не нужна совместимость с win98, или он считывает 32767 байт только если операционка win98?

Да, есть такое ограничение. Это касается всех версии Windows. Я бы использовал самопальную функцию:


Код: Func _IniReadSectionEx($sIniFile, $sSection)
Local $aFileReadArr = StringSplit(StringStripCR(FileRead($sIniFile)), @LF)
If @error Then Return SetError(1, 0, "")

Local $aRetArr[1][1], $iUbound, $aSplitKeyValue, $sKey, $sValue
For $i = 1 To $aFileReadArr[0]
If $aFileReadArr[$i] = "[" & $sSection & "]" Then
For
$j = $i+1 To $aFileReadArr[0]
If StringLeft($aFileReadArr[$j], 1) = "[" Then ExitLoop 2
$aSplitKeyValue = StringSplit($aFileReadArr[$j], "=")
If Not @error Then
$sKey = $aSplitKeyValue[1]
$sValue = ""
If UBound($aSplitKeyValue)-1 >= 2 Then $sValue = $aSplitKeyValue[2]

$aRetArr[0][0] += 1
ReDim $aRetArr[$aRetArr[0][0]+1][2]
$aRetArr[$aRetArr[0][0]][0] = $sKey
$aRetArr[$aRetArr[0][0]][1] = $sValue
EndIf
Next

ExitLoop
EndIf
Next

Return $aRetArr
EndFunc
Автор: NORIO
Дата сообщения: 16.03.2008 05:13
Maza Faka
Спасибо понял.

Ещё вопрос.
Как наиболее компактным способом найти слово в строке зная его порядковый номер?
Автор: Maza Faka
Дата сообщения: 16.03.2008 07:45
NORIO

Цитата:
Найти слово в строке зная его порядковый номер

Если я правильно тебя понял:

Код: $string = "one two three four five"

$result = StringRegExp($string, "(\w+\s*){3}", 1) ;Ищем третье слово в строке

MsgBox(0, "", $result[0])
Автор: zero1632
Дата сообщения: 16.03.2008 13:29

Цитата:
Как пограмотней из полного имени файла вытащить название его расширения?


Код:$sExt = StringRegExpReplace('piture.jpg', '^.*\.', '')

ViSiToR


ViSiToR , спасибо. Мне нужно чтобы в зависимости от расширения и закладки в ini совершались перемещения в ту или иную директорию. А вот как сделать wildcards - я уже мозг сломал. Получается два пути: если расширение файла совпадает с заданным в ini - то нет проблем с ограничением в 32кб считываемых строк, но невозможно использовать маски, если пользоваться твоей функцией - то нет проблем с ограничением размерности ini, но как сделать маски? я уже мозг сломал. Делать сравнение расширения и имеющегося в ini через StringRegExp?

[Mov]
doc=c:\archve\doc\
pd?=c:\archive\pdf\
*=c:\archive\musor\
Автор: NORIO
Дата сообщения: 16.03.2008 14:21
Maza Faka
О! Пасиб, то что надо.
Автор: NORIO
Дата сообщения: 17.03.2008 14:20
А как посчитать количество слов в строке?
Функцию счёта строк нашёл, а слов нет.
Автор: ViSiToR
Дата сообщения: 17.03.2008 17:34
zero1632
Я если честно ничего не понял, распиши пошагово что требуется сделать.

NORIO

Цитата:
как посчитать количество слов в строке?

Смотря что считать за разделитель между словами, вот решения для пробелов:


Код:
$Var = "Слово1 слово2 ещё слова"

StringReplace(StringStripWS($Var, 7), " ", "")
ConsoleWrite("# Слов в $Var: " & @extended+1 & @LF)
Автор: NIKZZZZ
Дата сообщения: 17.03.2008 18:25
NORIO

Цитата:
А как посчитать количество слов в строке?



Код: $Text="Слово1 слово2,ещё.слова"
$Delims='[\s,.:;]+'
$array = StringRegExp($Text & ' ', $Delims, 3)
MsgBox(0,'К-во слов',UBound($array))
Автор: NORIO
Дата сообщения: 17.03.2008 18:36
Maza Faka

Код: $string = "one two three four five"

$result = StringRegExp($string, "(\w+\s*){3}", 1) ;Ищем третье слово в строке

MsgBox(0, "", $result[0])
Автор: NORIO
Дата сообщения: 18.03.2008 03:45
А как зажать спейс на несколько милисекунд?
Что то ненашёл.
Автор: gregaz
Дата сообщения: 18.03.2008 07:24
Не могу найти ответ на несколько вопросов по корзине удаленных файлов

1. Как восстановить файлы после удаления ?
2. Как прочитать содержимое корзины ?
3. Может есть возможность отменить последнее действие(удаление файлов) ?
Автор: Maza Faka
Дата сообщения: 18.03.2008 07:54
NORIO

Цитата:
А код работает неправильно

У меня работает правильно. Попробуй так:

Код: $string = "one two three four five"

$result = StringRegExp($string, "((\w+)\s*){3}", 1) ;Ищем третье слово в строке

MsgBox(0, "", $result[0])
Автор: ViSiToR
Дата сообщения: 18.03.2008 08:07
NORIO

Код:
$iTimerInit = TimerInit()

While TimerDiff($iTimerInit) < 100
Send("{SPACE}")
WEnd
Автор: gregaz
Дата сообщения: 18.03.2008 08:50

Цитата:
Цитата:Как прочитать содержимое корзины ?



Цитата:
ViSiToR

Код:
$sRecycle_Files_List = ""
$hSearch = FileFindFirstFile("C:\Recycled\*.*")

While $hSearch <> -1
$sNextFile = FileFindNextFile($hSearch)
If @error Then ExitLoop

$sRecycle_Files_List &= $sNextFile & @CRLF
WEnd

ConsoleWrite($sRecycle_Files_List)


Так просто не прочитаешь
В папке C:\RECYCLER файла находятся не явно , а в системных файлах , да и папки RECYCLER находятся на всех дисках

А по поводу восстановления файлов я надеялся на наличие неизвестной мне простой команды , но ...
Автор: Maza Faka
Дата сообщения: 18.03.2008 10:06
gregaz

Цитата:
Так просто не прочитаешь

Может так:

Код: Dim $Path = "c:\RECYCLER", $Flag = False, $FileList

_GetDeletedFiles($Path)

MsgBox(0, "", $FileList)

Func _GetDeletedFiles($sPath)
Local $iTrashFolder, $iFindFirst, $iFindNext

$iFindFirst
= FileFindFirstFile($sPath & "\*.*")
If @error Then Return SetError(1)

While 1
$iFindNext = FileFindNextFile($iFindFirst)
If @error Then ExitLoop

If
StringInStr(FileGetAttrib($sPath &"\"& $iFindNext), "SHD") And $Flag = False Then
$Flag = True
_GetDeletedFiles($sPath &"\"& $iFindNext)
ElseIf ($iFindNext <> "INFO2") And ($iFindNext <> "desktop.ini") Then
$FileList &= $sPath &"\"& $iFindNext & @LF
EndIf
WEnd


FileClose($iFindFirst)
EndFunc
Автор: gregaz
Дата сообщения: 19.03.2008 19:18
ViSiToR
Maza Faka
Спасибо можно найти только придется искать по всем дискам , имеющим папку RECYCLER
Автор: zero1632
Дата сообщения: 19.03.2008 21:43

Цитата:
zero1632
Я если честно ничего не понял, распиши пошагово что требуется сделать.


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

то есть в ini файле указывается куда их складывать.

doc=c:\doc\
jpg=c:\jpg\

Так вот, хотелось бы ипользовать маски типа * и ?

то есть:
gi?=c:\gif\
*=c:\musor\ <---- а это как бы для всего остального

Делать через StringRegExpReplace и через (.) ???? Посмотрел твою функцию отделения на каталоги, файлы и расширения - так до сих пор разобраться как он работает так и не смог, хотя в свой скрипт включил.
Поэтому с точкой - заменой (?) еще понимаю как сделать, а со (*) в качестве маски - вообще не представляю, хотя понимаю, что возможно.


Цитата:
английские слова скорее всего можно найти через StringRegExp

Также и русские, только искать в нижнем регистре (конвертировать всё).


Гм. почему именно в нижнем регистре?
Написал поиск уже с StringInStr, правда русские символы в ворде не пробовал еще
Преобразовывать через StringLower ?

p.s. И все же, можно средствами аутоита открыть вордовский файл и нормально его записать(конвертировать) в txt ?
Автор: NIKZZZZ
Дата сообщения: 19.03.2008 23:40
zero1632

Цитата:
Делать через StringRegExpReplace и через (.) ???? Посмотрел твою функцию отделения на каталоги, файлы и расширения - так до сих пор разобраться как он работает так и не смог, хотя в свой скрипт включил.
Поэтому с точкой - заменой (?) еще понимаю как сделать, а со (*) в качестве маски - вообще не представляю, хотя понимаю, что возможно.


Чтобы использовать подобные маски в StringRegExp нужно провести замену
"?" => "."
"*" => ".*"



Добавлено:
gregaz

Цитата:
А по поводу восстановления файлов я надеялся на наличие неизвестной мне простой команды , но ...



Код: $var = FileOpenDialog('',"::{645FF040-5081-101B-9F08-00AA002F954E}","All (*.*)" )
MsgBox('','',$Var)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.