Показать полную графическую версию : [решено] Свойства, аттрибуты файлов и папок
Меня интересует работа с файлами и директориями, я бы даже хотел напсать скрипт для синхронизации файлов (такой какой мне нужно), и скрипт, сохраняющий в html файл список файлов со свойствами и аттрибутами в виде таблицы. Но возникли вопросы, ответы на которые не нашёл в хелпe, или может быть некоторые из возможностей, которые мне нужны, не поддерживаются AutoIT. Не могли бы мне кто-нибудь ответиь на следующие вопросы.
Какими командами или переменными можно получить следующие свойства (аттрибуты) файла (которые, например можно отобразить в проводнике, в режиме отображения "Таблица":
• тип файла,
• дата создания,
• владелец файла, если файл храниться на NTFS-разделе
• изменён (дата последнего изменения),
• открыт (дата последнего доступа)?
Я нашёл в Хелпе лишь следующее:
• как узнать время последней модификации файла: FileGetTime ( "filename" ), эта команда, как я понял выдаёт только время последнего изменения, но не выдаёт время создания, и время последнего открытия (доступа).
• как узнать размер: FileGetSize
И ещё вопрос: у меня не работает эмуляция клавишь shift, alt, сontrol, т.е. например команда Send("^c") не работает. Кто-нибудь знает, с чем это связано?
ctrl+с могут не работать, если основная раскладка не русская.
Насчет типа файла: это расширение ? Если да то можно-
$file = "Blah.bmp"
$str = StringTrimLeft($file,StringInStr($file, "."))
If Not @error Then
MsgBox(0,"Done","Расширение файла " & $file & " = " & $str)
Else
MsgBox(0,"Чета не рабит","Ты какой-то хреновый кодер или у файла нет расширения")
EndIf
Дата создания и проч я не знаю, думаю это есть в разных UDF.
FlatX007
16-08-2009, 19:05
• тип файла, »
#include <file.au3>
#include <array.au3>
Dim $szDrive, $szDir, $szFName, $szExt
$TestPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
_ArrayDisplay($TestPath,"Demo _PathSplit()")
FileGetAttrib - атрибуты файла
FileGetTime - время создания или модифицирования. Смотрите последнюю версию справки. Русская версия устарела в данном вопросе.
тип файла »
$sFileType = _FileGetType("C:\boot.ini")
MsgBox(64, 'Title', $sFileType)
Func _FileGetType($sFile)
Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
Local $sRegDefault, $sRegType = "", $sExt
If _FileIsFolder($sFile) Then
$sRegDefault = RegRead("HKCR\Folder", "")
If $sRegDefault <> "" Then $sRegType = $sRegDefault
Else
$sExt = StringRegExpReplace($sFile, '^.*\.(.{0,5})$', '.\1')
If @extended = 0 Or $sExt = $sFile Then
$sExtSaerch = FileFindFirstFile($sFile & ".*")
$sExt = StringRegExpReplace(FileFindNextFile($sExtSaerch), '^.*\.', '.')
$sFile &= $sExt
EndIf
$sRegDefault = RegRead("HKCR\" & $sExt, "")
If $sRegDefault <> "" Then $sRegType = RegRead("HKCR\" & $sRegDefault, "")
If $sRegType = "" Then $sRegType = $sExt & "-File"
EndIf
Opt("ExpandEnvStrings", $iOld_Opt_EES)
Return $sRegType
EndFunc
Func _FileIsFolder($sPath)
Return StringInStr(FileGetAttrib($sPath & "\"), "D")
EndFunc
Shift, alt, ctrl могут не работать, если основная раскладка не русская. »
Первый раз слышу. Из за раскладки может неправильно определяться буква c, поэтому лучше делать так:
_SendEx("^c")
Func _SendEx($sKeys, $iFlag=0)
If @KBLayout = 0419 Then
Local $aANSI_Chars = StringSplit("ёйцукенгшщзхъфывапролджэячсмитьбю.?", "")
Local $aASCII_Chars = StringSplit("`qwertyuiop[]asdfghjkl;'zxcvbnm,./&", "")
For $i = 1 To $aANSI_Chars[0]
$sKeys = StringReplace($sKeys, $aASCII_Chars[$i], $aANSI_Chars[$i])
Next
EndIf
Return Send($sKeys, $iFlag)
EndFunc
А конкретно для копирования, лучше вовсе так: Send("^{INS}")
А конкретно для копирования, лучше вовсе так: Send("^{INS}") [B] Да, точно, надо проверить.
владелец файла »
ConsoleWrite(_FileGetOwner(@HomePath) &@CRLF)
Func _FileGetOwner($sFile, $sComputer = ".")
Local $objWMI, $colItems, $objItem, $strOwner = ""
$objWMI = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
If Not(IsObj($objWMI)) Then Return SetError(1, 0, "")
$colItems = $objWMI.ExecQuery("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & $sFile & "'}" _
& " WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner")
If Not(IsObj($colItems)) Then Return SetError(2, 0, "")
For $objItem In $colItems
$strOwner = $objItem.ReferencedDomainName &"\"& $objItem.AccountName
If $strOwner=="\" Then $strOwner = $objItem.SID
Next
Return $strOwner
EndFunc
Вот ещё функция для получения свойств файла:
#include <Array.au3>
$aProperties = _FileGetExtProperty(@AutoItExe, -1)
_ArrayDisplay($aProperties)
;===============================================================================
; Function Name: _FileGetExtProperty($sPath, $iProp)
; Description: Returns an extended property of a given file.
; Parameter(s): $sPath - The path to the file you are attempting to retrieve an extended property from.
; $iProp - The numerical value for the property you want returned. If $iProp is is set
; to -1 then all properties will be returned in a 1 dimensional array in their corresponding order.
; The properties are as follows:
; # Windows XP / Windows Server 2003 | Windows 2000
; 0 Name Name
; 1 Size Size
; 2 Type Type
; 3 Date Modified Date Modified
; 4 Date Created Attributes
; 5 Date Accessed Comment
; 6 Attributes Date Created
; 7 Status Date Accessed
; 8 Camera Model Owner
; 9 Author ???
; 10 Title Author
; 11 Duration Title
; 12 Category Subject
; 13 Pages Category
; 14 Owner Pages
; 15 Copyright Copyright
; 16 Artist Company Name
; 17 Genre Module Desription
; 18 Protected Module Version
; 19 Comments Product Name
; 20 Album Title Product Version
; 21 Subject Sender Name
; 22 Dimensions Recipient Name
; 23 Year Recipient Number
; 24 Track Number Csid
; 25 Date Picture Taken Tsid
; 26 Bit Rate Transmission Time
; 27 ??? Caller Id
; 28 ??? Routing
; 29 ??? Audio Format
; 30 Company Sample Rate
; 31 Description Audio Sample Size
; 32 File Version Channels
; 33 Product Name Play Length
; 34 Product Version Frame Count
; 35 ??? Frame Rate
; 36 ??? Video Sample Size
; 37 ??? Video Compression
; Requirement(s): File specified in $spath must exist.
; Return Value(s): On Success - The extended file property, or if $iProp = -1 then an array with all properties
; On Failure - 0, @Error - 1 (If file does not exist)
; Author(s): Simucal (Simucal@gmail.com), Mod. by G.Sandler (a.k.a CreatoR)
; Note(s):
;
;===============================================================================
Func _FileGetExtProperty($sPath, $iProp)
Local $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
If Not FileExists($sPath) Then Return SetError(1, 0, 0)
$sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
$sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))
$oShellApp = ObjCreate("shell.application")
$oDir = $oShellApp.NameSpace($sDir)
$oFile = $oDir.ParseName($sFile)
If $iProp = -1 Then
Local $aProperty[35]
For $i = 0 To 34
$aProperty[$i] = $oDir.GetDetailsOf($oFile, $i)
Next
Return $aProperty
EndIf
$sProperty = $oDir.GetDetailsOf($oFile, $iProp)
If $sProperty = "" Then Return 0
Return $sProperty
EndFunc ;==>_FileGetExtProperty
Func _FileGetOwner($sFile, $sComputer = ".") »
У меня она возвращает пустую строку :idontnow:
Creat0R, у меня нормально отрабатывает. ХР SP3 EN
FlatX007
18-08-2009, 07:31
У меня она возвращает пустую строку »
На Вин7 всё нормально ...
MsgBox(0,"", _FileGetOwner(@ScriptFullPath) )
Так возвращает владельца администратора.
Спасибо всем!!, проблемма решена. Насчёт свойств файлов всё ясно, насчёт даты последнего изменения файла, сам проверил, оказывается если пмоенять параметр 1 на 3 FileGetTime ( "filename", 3 ), то выдаёт дату последнего изменения. Наверное параметр 2 показывает дату последнего доступа, поскольку у меня отключено слежение за открытием файлов, я не знаю. Если какой-то топик, не рассмотрел, то потому, что пока нет времени.
FlatX007
17-01-2010, 00:43
Вот ещё функция для получения свойств файла: »
На ХР возвращает только массив из 8 ячеек , на Вин 7 - 34 ячейки.
Мне нужно на ХР - 21 ячейка :) ... почему не работает ?
a_Wizard
19-01-2016, 09:43
Как сортировать в одном окне аудиофайлы по последнему открытию?
У меня 900 песен, которые лежат в нескольких десятках папках. Прослушивая выборочно песни из разных альбомов несколько раз натолкнулся на файлы, которые не звучат. Однако очень скоро я позабыл названия этих песен и сейчас не могу вспомнить какие это были (среди 900) файлы. В Свойствах каждого файла конечно можно увидеть дату последнего открытия. Но проверять так по одному отнимет много времени. Поэтому, нужна общая сортировка по всем файлам. В колонке выбора столбцов отображения атрибутов нет Дата последнего открытия файла. Тогда как в одном окне мне увидеть Дата последнего открытия файла?
Для отображения всех песен (из разных папок) в одном окне достаточно в строке Поиск написать .mp3
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC