Как найти папку autoit

  • #1

Версия AutoIt: 3.3.14.2

Описание:
Есть некоторый путь, который заранее известен: путь к папке с игрой, WTF, Account.
В этой папке находятся папки с рандомизированной последовательностью чисел.

zCFz5hhrtLQ.jpg

Заранее известно, что в одной из папок точно есть нужна нам папка, положим, “Борейская тундра”

rrSgIAo5rBg.jpg

Нужно проверить все папки, с учетом того, что мы не знаем их названия. Знаем мы только то, что в одной из них есть папка “Борейская тундра”, которая нам и нужна.
Примечания: Вкратце суть вопроса: как указать в пути к папке папку по её порядковому номеру, вместо названия? Может есть какой-то макрос?
Спасибо за помощь!

  • #2

havi2307, после того как нужная папка найдена нужно открыть папку в которой она находиться или каковы дальнейшие действия? Еще интересно чем не подходит поиск Windows

  • #3

Tempo сказал(а):

havi2307, после того как нужная папка найдена нужно открыть папку в которой она находиться или каковы дальнейшие действия? Еще интересно чем не подходит поиск Windows

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

  • #4

#include <File.au3>

$Path = "I:World of WarcraftWTFAccount"
$Name = "Борейская тундра"
$aList = _FileListToArrayRec($Path, $Name, $FLTAR_FOLDERS, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
If Not @error Then ConsoleWrite($aList[1] & @CRLF)

  • #5

InnI сказал(а):

#include <File.au3>

$Path = "I:World of WarcraftWTFAccount"
$Name = "Борейская тундра"
$aList = _FileListToArrayRec($Path, $Name, $FLTAR_FOLDERS, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
If Not @error Then ConsoleWrite($aList[1] & @CRLF)

Отлично, спасибо.
А как найти следующее совпадение после этого?

  • #6

havi2307 [?]

как найти следующее совпадение

Функция возвращает массив. Следовательно, следующее будет $aList[2].

How can I make an AutoIt file that returns its own current path when it is run on Windows 7?

I want to have the program check to see if it is in a given directory, and if it isn’t, make a copy of itself in that directory.

TylerH's user avatar

TylerH

20.7k64 gold badges72 silver badges97 bronze badges

asked Nov 8, 2014 at 20:34

David Greydanus's user avatar

David GreydanusDavid Greydanus

2,3581 gold badge22 silver badges42 bronze badges

As per Documentation – Macros:

@ScriptDir Directory containing the running script. Only includes a trailing backslash when the script is located in the root of a drive.

@ScriptFullPath Equivalent to @ScriptDir & "" & @ScriptName

Example:

#include <FileConstants.au3>

Global Const $g_sDirTarget = 'C:foldername'

If Not (@ScriptDir = $g_sDirTarget) Then

   FileCopy(@ScriptFullPath, $g_sDirTarget, $FC_NOOVERWRITE + $FC_CREATEPATH)

EndIf

Community's user avatar

answered Nov 8, 2014 at 21:50

user4157124's user avatar

user4157124user4157124

2,74113 gold badges26 silver badges42 bronze badges

You may use the macros @ScriptDir

Refer to Official Autoit – Macros help:

David Greydanus's user avatar

answered Nov 14, 2014 at 6:46

Aaron Ooi's user avatar

Function to search for files or folders.

FileOperations.7z – version 1.8.4 from 2014.03.18, (pastebin: Ru , Ru-example)

_FO_CorrectMask (Help)

_FO_FileSearch (Help)

_FO_FolderSearch (Help)

_FO_SearchEmptyFolders (Help)

_FO_FileDirReName (Help)

_FO_GetCopyName (Help)

_FO_FileBackup (Help)

_FO_PathSplit (Help)

_FO_IsDir (Help)

_FO_ShortFileSize (Help)

_FO_IsEmptyFolder (Help)

_FO_CreateFile

alternative:

RecFileListToArray (Melba23)

FileListToArrayEx (DXRW4E)

FileListToArray (SmOke_N)

FileFindFirstFile (NIKZZZZ) old

_FileFindFirstFile, _FileFindNextFile (AZJIO)

FileDirList (MrCreatoR, amel27), (cmd.exe Dir /b)

FileListToArrayRecursive + _Callback (therks)

FileSearch (AZJIO), link2

myFileListToArray_AllFiles (akurakkauaaa)

Update

Spoiler

24.05.2014 Added function _FO_CreateFile

18.03.2014 Updated _FO_IsEmptyFolder

02.08.2013 _FO_IsEmptyFolder

15.06.2013 _FO_FileSearch + $vExcludeFolders, $iExcludeDepth. Modified $sLocale. _FO_ShortFileSize

28.04.2013 _FO_SearchEmptyFolders: I used _FO_IsDir instead of FileExists

27.04.2013 $sPath = “” now it causes a mistake

20.11.2012 Added function _FO_IsDir

08.08.2012 case sensitive

09.06.2012 Added function __FO_UserLocale

20.05.2012 Added function _FO_FileBackup, _FO_PathSplit, Update _FO_SearchEmptyFolders

14.05.2012 Added function _FO_FileDirReName, _FO_GetCopyName

16.02.2012 Added function _FO_SearchEmptyFolders, Added the prefix “_FO”

10.01.2012 Added function _CorrectMask

27.11.2011 Fixed: correction masks; existence of a path

09.11.2011 Fixed: Separator character “;” replaced by “|”

24.10.2011 Fixed: (Full=3)+(Arr=1), _FolderSearch faster

22.10.2011 Fixed: Return __GetListMask

17.10.2011 Added: forced $TypeMask

15.10.2011 Fixed: @error = 3 – not found

14.10.2011 Fixed: Mask=(*z.exe;a*.msi) or (exe;msi). _FolderSearch+($Include = True/False)

12.10.2011 Fixed: __FileSearchMask

10.10.2011 Fixed: If $Include=False, Mask(__FileSearchMask)

Accordingly, the updated (26.11.2012) program: >TextReplace, >Create_list_files, >Search_duplicates, >Synchronization

Accordingly, the updated (22.11.2011) program: >ReName


Edited March 5 by AZJIO

На чтение 5 мин Просмотров 1.4к. Опубликовано 13.06.2018

Мы создаем множество переменных, которые используем для хранения различных фрагментов данных в наших скриптах. Но эта информация хранится в программе без возможности «вытащить ее». Более того, когда программа закрывается, информация теряется. Одним из способов получения информации, доступной извне, и сохранения ее на долго является создание файла и запись информации в него.

Содержание

  1. FileOpen
  2. FileWrite
  3. StringSplit
  4. FileRead
  5. FileOpenDialog

FileOpen

Во-первых, нам нужно «открыть» новый файл с помощью функции FileOpen (которую также можно использовать для открытия существующего файла).

FileOpen имеет два параметра: имя файла (которое должно включать путь к нашему файлу) и необязательный параметр «mode», используемый для определения определенных параметров, например, переписываем ли мы данные в файл, добавляем и т.д.

Одна строка кода создаст наш новый файл:

Как в Autoit работать с файлами?

  1. Это макрос. Теперь нам нужно понять, что этот макрос является ярлыком, который предоставляет путь к каталогу, в котором находится наш скрипт. Если бы у нас не было этого ярлыка, нам пришлось бы использовать полный путь, такой как «c: documents and settings user files autoitmyfile.txt». Другое преимущество заключается в том, что наша программа может запускаться на компьютерах других людей, которые имеют разные папки и каталоги. Если их папки отличаются, ваша программа может не работать. Использование макроса гарантирует, что независимо от пути — ваш скрипт найдет его. Обратите внимание на использование амперсанда и обратную косую черту перед именем файла. Это добавляет обратную косую черту и имя файла в путь к скрипту.
  2. Это то, как мы навезем наш файл. В нашем случае «myfile.txt».
  3. Это дополнительный параметр режима. В этом случае мы используем 2, который сигнализирует функции, что мы хотели бы перезаписать все, что находится в файле.

FileOpen возвращает «дескриптор», который мы сохраняем в нашей переменной $ myFile, когда эта строка кода выполняется. Вы можете использовать этот дескриптор для последующих функций файла.

$myFile    = FileOpen(@ScriptDir & “myfile.txt”, 2)

FileWrite

Теперь нам нужно добавить некоторые данные в наш файл. Для этого создадим форму с полем для ввода имени файла($input_filename), текта  файла($input_filetext) и кнопку, которая будет вызывать функцию создающую новый файл. Возьмем переменную из поля $input_filetext и запишем ее в наш вновь созданный файл с помощью функции FileWrite.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

#include <StaticConstants.au3>

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#Include <GuiButton.au3>

#include <EditConstants.au3>

Local $File_example = GUICreate(“File_example”,456,420,1,1,1,1)

Local $EditField = GUICtrlCreateEdit(“”,10,180,438,220,1,1)

Local $button_Create_File = GUICtrlCreateButton(“Создать файл”,290,10,100,30,1,1)

Local $input_filename = GUICtrlCreateInput(“Тест”,118,20,150,20,1,$WS_EX_CLIENTEDGE)

GUICtrlCreateLabel(“Имя файла”,20,20,82,15,1,1)

GUICtrlSetBkColor(1,“-2”)

GUICtrlCreateLabel(“Текст”,19,60,82,15,1,1)

GUICtrlSetBkColor(1,“-2”)

Local $input_filetext = GUICtrlCreateInput(“Привет мир”,117,60,150,20,1,$WS_EX_CLIENTEDGE)

Local $button_Write_File = GUICtrlCreateButton(“Добавить запись”,289,50,100,30,1,1)

GUISetState(@SW_SHOW,$File_example)

While 1

$nMsg = GUIGetMsg()

Switch $nMsg

Case $GUI_EVENT_CLOSE

Exit

                Case $button_Create_File

_Create_File()

                Case $button_Write_File

_Write_File()

EndSwitch

WEnd

; #FUNCTION# ====================================================================================================================

; Name ……….: _Create_File

; Description …: Создание нового файла .txt

; Syntax ……..: _Create_File()

; Parameters ….: None

; Return values .: None

; Author ……..: Hodogor

; Modified ……:

; Remarks …….:

; Related …….:

; Link ……….:

; Example …….: No

; ===============================================================================================================================

Func _Create_File()

$sFileName = GUICtrlRead($input_filename)

$myFile    = FileOpen(@ScriptDir & “” & $sFileName & “.txt“, 2)

GUICtrlSetData($EditField,@CRLF & @HOUR & ‘:’ & @MIN & ‘:’ & @SEC & “/Создан файл ” & @CRLF & @ScriptDir & “ &$sFileName & “.txt”,1)

EndFunc

Как в Autoit работать с файлами?

FileWrite имеет два параметра: имя файла или дескриптор файла и строку.

Func _Write_File()

$sFileName = GUICtrlRead($input_filename)

$myFile    = FileOpen(@ScriptDir & “” & $sFileName & “.txt“, 2)

$myString  = GUICtrlRead($input_filetext)

FileWrite($myFile,$myString)

FileClose($myFile)

GUICtrlSetData($EditField,@CRLF & @HOUR & ‘:’ & @MIN & ‘:’ & @SEC & “/Сделана запись в файл ”  & @CRLF & @ScriptDir & “ &$sFileName & “.txt”,1)

EndFunc

В приведенном выше примере мы вызвали функцию FileWrite с дескриптором имени файла, который мы получили из поля функцией GUICtrlRead в первой строке кода, что означает, что мы сделаем запись в файл txt, расположенный в том же каталоге, что и наш скрипт. Второй параметр взят из поля input с дескриптором $input_filetext, куда можно ввести текст который надо записать в файл.

Если файл все еще открыт, он не будет использоваться. Чтобы закрыть его, мы вызываем функцию FileClose, которая имеет только один параметр Filename / handle. Результат работы можно записать поле edit.

Как в Autoit работать с файлами?

Если вы откроете файл, вы увидите следующее:

Как в Autoit работать с файлами?

StringSplit

Так же, как с несколькими строками кода, мы создали файл. Это был очень упрощенный пример. Что если бы мы хотели создать файл персонализированных приветствий, сгенерированных нами.Как это будет выглядеть?

Func _Write_Array_File()

$sFileName = GUICtrlRead($input_filename)

$myFile    = FileOpen(@ScriptDir & “” & $sFileName & “.txt“, 2) ;1

$myArray   = StringSplit(GUICtrlRead($input_filearray),”,“)      ;2

For $a =1 To UBound($myArray)-1                                  

FileWrite($myFile,@CRLF & @HOUR & ‘:’ & @MIN & ‘:’ & @SEC & “ / Это сообщение для” & $myArray[$a]) ;3

Next ;4

FileClose($myFile)                                               ;5

GUICtrlSetData($EditField,@CRLF & @HOUR & ‘:’ & @MIN & ‘:’ & @SEC & “/Массив успешно записан в файл ”  & @CRLF & @ScriptDir & “ &$sFileName & “.txt”,1)

EndFunc

  1.  Мы создаем наш файл так же, как и в предыдущем примере.
  2.  Мы разбиваем имена на массив, используя StringSplit.
  3.  Пишем приветствия в наш файл.
  4.  После завершения цикла for скрипт будет продолжен.
  5. Следующее, что мы делаем, это закрываем файл.

Теперь, когда мы снова откроем наш файл, мы увидим следующее:

Как в Autoit работать с файлами?

FileRead

К этому моменту мы успешно создали файл, в него данные и закрыли его, чтобы мы могли получить доступ к нему и просмотреть его содержимое. Этот последний шаг, когда мы вручную нашли файл и открыли его, могут также быть автоматизированным. FileRead — это функция AutoIt, которая, как следует из названия, позволяет нам программно читать файл. Он имеет один обязательный параметр для имени файла / дескриптора. Он также имеет необязательный параметр, если вы хотите ограничить количество прочитанных символов.

Func _Read_File()

$sFileName = GUICtrlRead($input_filename)

$fileIn    = FileRead(@ScriptDir & “” & $sFileName & “.txt“)

GUICtrlSetData($EditField,@CRLF & @HOUR & ‘:’ & @MIN & ‘:’ & @SEC & “/Содержимое файла: & $sFileName & @CRLF & $fileIn,1)

MsgBox(0,,$fileIn)

EndFunc

В приведенном выше коде мы создали переменную $ fileIn для хранения содержимого файла, считанного с помощью функция FileRead. Файл, который мы читаем, тот же, который мы только что создали. Поэтому, когда мы ставим содержимое переменной $fileIn в поле сообщения мы увидим следующее:

Как в Autoit работать с файлами?

FileOpenDialog

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

Func _Open_File()

$var = FileOpenDialog(“Выбрать файл”, @ScriptDir & “”, “Текстовые файлы (*.txt)“, 1 + 8)

GUICtrlSetData($EditField,@CRLF & @HOUR & ‘:’ & @MIN & ‘:’ & @SEC & “Вы выбрали & @CRLF & $var & @CRLF ,1)

EndFunc

Этот код создаст диалоговое окно с открытием нового файла с заголовком «Выбрать файл», который по умолчанию будет отображаться доступные файлы в начальном каталоге, который мы указали, — в этом случае наш каталог скриптов. Последний параметр — это фильтр. В нашем случае нас интересует только просмотр текстовых файлов. Если вы запустите код и у вас все еще есть файл, который мы создали ранее в главе вашего каталога скриптов, вы должны увидеть следующие:

Как в Autoit работать с файлами?

Код и файл проекта можно скачать ниже по ссылке:

[sdm_download id=»660″ fancy=»2″]

Как я могу создать файл AutoIt, который возвращает свой текущий путь при запуске в Windows 7?

Я хочу, чтобы программа проверила, находится ли она в заданном каталоге, а если нет, сделайте копию себя в этом каталоге.

2014-11-08 20:34

2
ответа

Решение

Согласно документации – макросы:

@ScriptDir Каталог, содержащий запущенный скрипт. Включает только обратную косую черту, когда скрипт находится в корне диска.

@ScriptFullPath Эквивалентно @ScriptDir & "" & @ScriptName

Пример:

#include <FileConstants.au3>

Global Const $g_sDirTarget = 'C:foldername'

If Not (@ScriptDir = $g_sDirTarget) Then

   FileCopy(@ScriptFullPath, $g_sDirTarget, $FC_NOOVERWRITE + $FC_CREATEPATH)

EndIf

2014-11-08 21:50

Вы можете использовать макросы @ScriptDir

Обратитесь к официальной справке Autoit – Macros:

2014-11-14 06:46

Добавить комментарий