-
#1
Версия AutoIt: 3.3.14.2
Описание:
Есть некоторый путь, который заранее известен: путь к папке с игрой, WTF, Account.
В этой папке находятся папки с рандомизированной последовательностью чисел.
Заранее известно, что в одной из папок точно есть нужна нам папка, положим, “Борейская тундра”
Нужно проверить все папки, с учетом того, что мы не знаем их названия. Знаем мы только то, что в одной из них есть папка “Борейская тундра”, которая нам и нужна.
Примечания: Вкратце суть вопроса: как указать в пути к папке папку по её порядковому номеру, вместо названия? Может есть какой-то макрос?
Спасибо за помощь!
-
#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
20.7k64 gold badges72 silver badges97 bronze badges
asked Nov 8, 2014 at 20:34
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
answered Nov 8, 2014 at 21:50
user4157124user4157124
2,74113 gold badges26 silver badges42 bronze badges
You may use the macros @ScriptDir
Refer to Official Autoit – Macros help:
answered Nov 14, 2014 at 6:46
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
Мы создаем множество переменных, которые используем для хранения различных фрагментов данных в наших скриптах. Но эта информация хранится в программе без возможности «вытащить ее». Более того, когда программа закрывается, информация теряется. Одним из способов получения информации, доступной извне, и сохранения ее на долго является создание файла и запись информации в него.
Содержание
- FileOpen
- FileWrite
- StringSplit
- FileRead
- FileOpenDialog
FileOpen
Во-первых, нам нужно «открыть» новый файл с помощью функции FileOpen (которую также можно использовать для открытия существующего файла).
FileOpen имеет два параметра: имя файла (которое должно включать путь к нашему файлу) и необязательный параметр «mode», используемый для определения определенных параметров, например, переписываем ли мы данные в файл, добавляем и т.д.
Одна строка кода создаст наш новый файл:
- Это макрос. Теперь нам нужно понять, что этот макрос является ярлыком, который предоставляет путь к каталогу, в котором находится наш скрипт. Если бы у нас не было этого ярлыка, нам пришлось бы использовать полный путь, такой как «c: documents and settings user files autoitmyfile.txt». Другое преимущество заключается в том, что наша программа может запускаться на компьютерах других людей, которые имеют разные папки и каталоги. Если их папки отличаются, ваша программа может не работать. Использование макроса гарантирует, что независимо от пути — ваш скрипт найдет его. Обратите внимание на использование амперсанда и обратную косую черту перед именем файла. Это добавляет обратную косую черту и имя файла в путь к скрипту.
- Это то, как мы навезем наш файл. В нашем случае «myfile.txt».
- Это дополнительный параметр режима. В этом случае мы используем 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 |
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.
Если вы откроете файл, вы увидите следующее:
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 |
- Мы создаем наш файл так же, как и в предыдущем примере.
- Мы разбиваем имена на массив, используя StringSplit.
- Пишем приветствия в наш файл.
- После завершения цикла for скрипт будет продолжен.
- Следующее, что мы делаем, это закрываем файл.
Теперь, когда мы снова откроем наш файл, мы увидим следующее:
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 в поле сообщения мы увидим следующее:
FileOpenDialog
Существует еще одна отличная функция, которая откроет окно поиска файла или каталога, чтобы пользователь мог выберите данный файл. Это функция FileOpenDialog. Вместо жесткого указания файла, который мы хотели прочитать в нашем предыдущем примере, мы могли бы просмотреть и выбрать его вручную.
Func _Open_File() $var = FileOpenDialog(“Выбрать файл”, @ScriptDir & “”, “Текстовые файлы (*.txt)“, 1 + 8) GUICtrlSetData($EditField,@CRLF & @HOUR & ‘:’ & @MIN & ‘:’ & @SEC & “Вы выбрали “ & @CRLF & $var & @CRLF ,1) EndFunc |
Этот код создаст диалоговое окно с открытием нового файла с заголовком «Выбрать файл», который по умолчанию будет отображаться доступные файлы в начальном каталоге, который мы указали, — в этом случае наш каталог скриптов. Последний параметр — это фильтр. В нашем случае нас интересует только просмотр текстовых файлов. Если вы запустите код и у вас все еще есть файл, который мы создали ранее в главе вашего каталога скриптов, вы должны увидеть следующие:
Код и файл проекта можно скачать ниже по ссылке:
[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