touch_xu 发表于 2010-12-29 10:58:04

【已解决】路径与扩展名问题

本帖最后由 touch_xu 于 2010-12-30 09:42 编辑

己知一个文件的完整路径〈不带引号〉,有什么函数可以快速从路径得到:
1 文件名
2 接展名

譬如c:\abc.txt

要的结果是
1 abc
2 txt

xowen 发表于 2010-12-29 11:20:35

;$spath必须是一个确实的文件
;_getdir($spath) 给出文件路径但不包含文件名
;_getfilename($spath)给出文件名 $sflag=1时不包含文件类型
;_getfiletype($spath)给出文件类型
然后调用函数即可
;=======将以下文本"Filegetinfo.au3"文本复制到Include下=============
Func _getdir($spath)
        If StringRegExp($spath, '\\') Then
                $sdir = StringRegExpReplace($spath, '\\[^\\]*$', '')
        Else
                $sdir = ''
        EndIf

        Return ($sdir)
EndFunc   ;==>_getdir

Func _getfilename($spath, $sflag = 0)
        If $sflag = 0 Then
                $sflag = 0
        Else
                $sflag = 1
        EndIf
        If $sflag = 0 Then
                $sFileName = StringRegExpReplace($spath, '.+\\', '')
        Else
                $sFileName = StringRegExpReplace($spath, '.+\\', '')
                $sFileName = StringRegExpReplace($sFileName, '\.[^\.]*$', '')
        EndIf

        Return ($sFileName)
EndFunc   ;==>_getfilename

Func _getfiletype($spath)
        $sFiletype = StringRegExpReplace($spath, '.+\.', '')
        Return ($sFiletype)
EndFunc   ;==>_getfiletype
;================================================

ahphsautoit 发表于 2010-12-29 11:52:29

#Include <File.au3>
_PathSplit($szPath, ByRef $szDrive, ByRef $szDir, ByRef $szFName, ByRef $szExt)

$szPath
要拆分的路径The path to be split (Can contain a UNC server or drive letter)
$szDrive
驱动器字符串
$szDir
目录字符串
$szFName
文件名字符串
$szExt
扩展名字符串

menfan1 发表于 2010-12-29 12:18:08

该标记已解决吧呵呵

netegg 发表于 2010-12-29 12:18:47

本帖最后由 netegg 于 2010-12-29 12:21 编辑

#Include <WinAPIEx.au3>
_WinAPI_PathFindFileName 文件名
_WinAPI_PathFindExtension 扩展名
_WinAPI_PathGetDriveNumber 驱动器
_WinAPI_PathGetArgs 参数(通常在命令行中使用)

papapa314 发表于 2010-12-29 15:01:49

呵呵,学习了

_ddqs. 发表于 2010-12-29 16:04:55

来个纯手工的
$FullPath = @ScriptFullPath
$FullPath = "\\192.168.0.108\tmp$\新建文件夹 (3)\Autoit_ACN\_____~~~T.au3"
$FullPath = "D:\192.168.0.108\tmp$\新建文件夹 (3)\Autoit_ACN\_____~~~T.au3"

ConsoleWrite("==============>"& $FullPath &@LF )
ConsoleWrite("==============>"& _fpGetName($FullPath, 1) &@LF )
ConsoleWrite("==============>"& _fpGetName($FullPath, 2) &@LF )
ConsoleWrite("==============>"& _fpGetName($FullPath, 3) &@LF )
ConsoleWrite("==============>"& _fpGetName($FullPath, 4) &@LF )




Func _fpGetName($string, $getname = 4) ; 1.drive / hostIP, 2.dir, 3.filename, 4.ext

        If $getname = 1 Then
                If StringInStr($string,":") = 2 Then
                        Return StringMid($string, 1, 1)
                ElseIf StringInStr($string,"\\") = 1 Then
                        Return StringMid($string, 1, StringInStr($string, "\", 0, 1, 3) - 1 )
                EndIf
        ElseIf $getname = 2 Then
                Return StringReplace( $String, StringMid( $string, StringInStr($string, "\", 0, -1), StringLen($string) ) , "" )               
        ElseIf $getname = 3 Then
                Return StringReplace( StringMid( $string, StringInStr($string, "\", 0, -1)+1, StringLen($string) ) , StringRight( $string, StringLen($string) - StringLen(StringRegExpReplace($string, "\.\w+\Z", "", 1)) ), "" )
        ElseIf $getname = 4 Then
                Return StringRight( $string, StringLen($string) - StringLen(StringRegExpReplace($string, "\.\w+\Z", "", 1)) - 1 )
        Else
                Return ""
        EndIf

EndFunc

pcbar 发表于 2010-12-29 19:35:10

$a="c:\abc.txt"
$exp=StringRegExp($a,'[^\.]+$',3)
MsgBox(0,0,$exp)
$fn=StringRegExp($a,'[^\\]+(?=\.[^\\]+$)',3)
MsgBox(0,0,$fn)
未判断文件命名的合法性

netegg 发表于 2010-12-29 20:42:27

回复 8# pcbar

无后缀的能出来吗

touch_xu 发表于 2010-12-30 09:41:41

多谢各位高手,学习了

masterpcc 发表于 2010-12-30 13:36:10

谢谢!!学习了!

m765555 发表于 2011-1-11 12:48:58

看起来好深奥,深,努力学习中

hxwb518 发表于 2011-1-11 15:30:05

{:face (113):}看起来好深奥,深,努力学习中

forestchi 发表于 2011-7-18 21:30:53

路过@$$$$$$$$$
页: [1]
查看完整版本: 【已解决】路径与扩展名问题