Что нового

Как получить имя и путь к выделенному файлу

Статус
Закрыто для дальнейших ответов.

StarEdik

Новичок
Сообщения
365
Репутация
4
Версия AutoIt: 3.3.7.14 beta

Описание:
Привет всем.Надо получить имя и путь к выделенному файлу.То есть в проводнике выделяю файл нажимаю на Ф11 открывается Блокнот а в блокноте ну например
1.Имя выделенного Файла : 1ст.doc
2.Путь к выделенному файлу : C:\Temp\

Примечания:
Пробовал это.Но это не то что мне надо

Код:
HotKeySet("{F11}",'_File_Name_Path') ;F11
HotKeySet("{ESC}", "_Exit")

While 1
Sleep(20)
WEnd

Func _File_Name_Path()

$FlNmPth = WinGetText("[ACTIVE]", "")

;$Txt_File = FileOpen(@ScriptDir & '\FileNamePath.txt', 2)
;$sText = 'Имя Файла ' & @CRLF & _
;         'Путь к файлу '
         
;FileWrite($Txt_File, $sText)
;FileClose($Txt_File)
MsgBox(0, "Имя и путь к выделенному файлу ",$FlNmPth)
Endfunc

Func _Exit()
    Exit
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Получить имя выделенному файлу:
Код:
#include <Misc.au3>

While 1
	if _IsPressed('01') Then
		$GetSelected = ControlListView('[ACTIVE]', '', 'SysListView321', 'GetSelected')
		$GetSelectedText = ControlListView('[ACTIVE]', '', 'SysListView321', 'GetText', $GetSelected)
		MsgBox(0, '', $GetSelectedText)
	EndIf
WEnd
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
StarEdik
В первом коде должно быть так:

Код:
Func _File_Name_Path()

Send("{F2}") ;нажатие F2 создает активное окно - окно редактирования имени файла, текст из которого захватывает следующая функция

$FlNmPth = WinGetText("[ACTIVE]", "")

И далее нужно разобрать этот текст


Zaramot
Более чем вероятно, что в Win 7 этот код не будет работать
А мой - в XP :D
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вроде так:
Код:
HotKeySet("{F11}", "_open")
HotKeySet("{ESC}","_exit")

While 1
    Sleep(100)
WEnd

Func _open()
    ClipPut("")
    Do
        Send("^c")
        Sleep(100)
    Until ClipGet() <> ""
    $str = ClipGet()
    ClipPut("")
    $afiles = StringSplit($str,@LF,3)
    If IsArray($afiles) Then
        For $i = 0 To UBound($afiles)-1
			$split = StringSplit($afiles[$i], '\')
			Run("notepad.exe")
			WinWait("[CLASS:Notepad]")
			ControlSetText("[CLASS:Notepad]", "", "Edit1", '1. Имя выделенного Файла: ' & $split[$split[0]] & @CRLF & "2. Путь к выделенному файлу: " & $afiles[$i])
        Next
    Else
        MsgBox(0,"Error","No files selected")
    EndIf
EndFunc   ;==>_open

Func _exit()
    Exit
EndFunc


Как использовать:
Запутите скрипт -> Выберите файл или папку -> Нажмите F11

P.S. На Windows XP работает отлично :smile:
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Переделал, такой тоже вроде везде работает:

Код:
HotKeySet("{F11}",'_File_Name_Path') ;F11
HotKeySet("{ESC}", "_Exit")

While 1
Sleep(20)
WEnd

Func _File_Name_Path()
Send("{F2}")
sleep(500)
$text= WinGetText("[ACTIVE]", "")
$array = StringSplit($text,Chr(10))
If $array[1]="FolderView" Then
$File_Name_Path=@DesktopDir&"\"&$array[UBound($array)-2]
MsgBox(0, "", $File_Name_Path)
Else
$File_Name_Path=$array[1]&"\"&$array[UBound($array)-2]
MsgBox(0, "", $File_Name_Path)
EndIf
Endfunc

Func _Exit()
    Exit
EndFunc
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Чтобы сократить код и получит директорию и имя файла
можно попробывать вот так:

Код:
$Open = FileOpenDialog ( "Open file", @ScriptDir, "All (*.*)")
$filename=StringRegExp($Open,'(^.*)\\(.*)\.(.*)$',3)
MsgBox(0,"Path",$filename[0])
MsgBox(0,"Name file",$filename[1] & "." & $filename[2])
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
WSWR
То что надо.Спасибо


Добавлено:
Сообщение автоматически объединено:

Viktor1703
Тоже не плох
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вот ещё, правда он очень большой но внём болше информации о файле: ;)
Код:
HotKeySet("{F11}", "_open")
HotKeySet("{ESC}","_exit")

While 1
    Sleep(100)
WEnd

Func _open()
    ClipPut("")
    Do
        Send("^c")
        Sleep(100)
    Until ClipGet() <> ""
    $str = ClipGet()
    ClipPut("")
    $afiles = StringSplit($str,@LF,3)
    If IsArray($afiles) Then
        For $i = 0 To UBound($afiles)-1
			$FileInfo = _PathSplitByRegExp($afiles[$i])
            Run("notepad.exe")
            WinWait("[CLASS:Notepad]")
            ControlSetText("[CLASS:Notepad]", "", "Edit1", '1. Исходный путь: ' & $FileInfo[0] & @CRLF & "2. Имя диска: " & $FileInfo[1] & @CRLF & '3. Путь без имени и расширения файла: ' & $FileInfo[2] & @CRLF & '4. Путь без расширения файла: ' & $FileInfo[3] & @CRLF & '5. Путь без имени диска: ' & $FileInfo[4] & @CRLF & '6. Имя и расширения файла: ' & $FileInfo[5] & @CRLF & '7. Имя файла: ' & $FileInfo[6] & @CRLF & '8. Только расширение: ' & $FileInfo[7])
        Next
    Else
        MsgBox(0,"Error","No files selected")
    EndIf
EndFunc   ;==>_open

Func _exit()
    Exit
EndFunc

;======================================================================================
;~ [0] = Исходный путь
;~ [1] = Имя диска
;~ [2] = Путь без имени и расширения файла
;~ [3] = Путь бз расширения файла
;~ [4] = Путь без имени диска
;~ [5] = Имя файла и его расширение
;~ [6] = Имя файла
;~ [7] = Только расширение файла
Func _PathSplitByRegExp($sPath)
    If $sPath = "" Or (StringInStr($sPath, "\") And StringInStr($sPath, "/")) Then Return SetError(1, 0, -1)

    Local $aRetArray[8], $pDelim = ""

    If StringRegExp($sPath, '^(?i)([A-Z]:|\\)(\\[^\\]+)+$') Then $pDelim = "\"
    If StringRegExp($sPath, '(?i)(^.*:/)(/[^/]+)+$') Then $pDelim = "//"

    If $pDelim = "" Then $pDelim = "/"
    If Not StringInStr($sPath, $pDelim) Then Return $sPath
    If $pDelim = "\" Then $pDelim &= "\"

    $aRetArray[0] = $sPath ;Full path
    $aRetArray[1] = StringRegExpReplace($sPath,  $pDelim & '.*', $pDelim) ;Drive letter
    $aRetArray[2] = StringRegExpReplace($sPath, $pDelim & '[^' & $pDelim & ']*$', '') ;Path without FileName and extension
    $aRetArray[3] = StringRegExpReplace($sPath, '\.[^.]*$', '') ;Full path without File Extension
    $aRetArray[4] = StringRegExpReplace($sPath, '(?i)([A-Z]:' & $pDelim & ')', '') ;Full path without drive letter
    $aRetArray[5] = StringRegExpReplace($sPath, '^.*' & $pDelim, '') ;FileName and extension
    $aRetArray[6] = StringRegExpReplace($sPath, '.*' & $pDelim & '|\.[^.]*$', '') ;Just Filename
    $aRetArray[7] = StringRegExpReplace($sPath, '^.*\.', '') ;Just Extension of a file

    Return $aRetArray
EndFunc


Как использовать:
Запутите скрипт -> Выберите файл или папку -> Нажмите F11
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Zaramot
Отличная работа.


Добавлено:
Сообщение автоматически объединено:

Ребята плз. Посторайтесь избежать большого кода. Спасибо всем отзываюшимься и друзям ...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Viktor1703 [?]
Чтобы сократить код и получит директорию и имя файла
можно попробывать вот так:
А при чём здесь выделенный файл? речь про уже выделенный файл в проводнике.

StarEdik
Тема уже решена на форуме, дали же ссылку, чем не подходит?
 
Статус
Закрыто для дальнейших ответов.
Верх