Netfox 发表于 2008-5-27 15:24:57

如何从字符串中获取文件名

请教一下大伙儿,比如我有一字符串c:\autoit\kernel\kernel.exe
怎么能得到kernel.exe这个文件名呢 ,谢谢。

[ 本帖最后由 Netfox 于 2008-5-27 15:49 编辑 ]

getcase 发表于 2008-5-27 15:34:03

$arr = StringSplit("c:\autoit\kernel\kernel.exe", "\")
Msgbox(0, "", $arr)

漠北雪~狼 发表于 2008-5-27 15:34:16

$Str = "c:\autoit\kernel\kernel.exe"
MsgBox(0,0,StringRight($Str,Stringlen($Str) - StringInStr($Str, "\",0,-1)))
$S = StringSplit($Str,"\")
MsgBox(0,0,$S[$S])

两种方法,都比较死板....

[ 本帖最后由 漠北雪~狼 于 2008-5-27 15:37 编辑 ]

Netfox 发表于 2008-5-27 15:42:16

谢谢大家的及时回答,我给三楼的代码是一样的原理 ,可是得到的结果,如果中文的话,却是乱码,
$vname = FileReadLine(@ScriptDir & "log.txt")       
        ;If @error = -1 Then ExitLoop
        if StringInStr($vname,"=") Then
               $v = StringSplit($vname,"=")
               $vname =$v
       Else
               $vname = $vname
       EndIf
       $filename = StringInStr($vname,"\",0,-1)
       $a = StringLen($vname)
       $b = $a - $filename
       MsgBox(0,"",StringRight($vname,$b-1))

[ 本帖最后由 Netfox 于 2008-5-27 15:49 编辑 ]

Netfox 发表于 2008-5-27 15:48:54

不好意思,呵呵,解决了,取右边的时候,多去减了一个字符。
MsgBox(0,"",StringRight($vname,$b-1))

漠北雪~狼 发表于 2008-5-27 15:51:45

那你不如试下这个,或等叁恨来回答了...$S = StringSplit($Str,"\")
MsgBox(0,0,$S[$S])

sanhen 发表于 2008-5-27 16:18:49

#include <file.au3>
#include <array.au3>
Dim $szDrive, $szDir, $szFName, $szExt
$TestPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
_ArrayDisplay($TestPath,"Demo _PathSplit()")

getcase 发表于 2008-5-27 16:36:34

原帖由 sanhen 于 2008-5-27 16:18 发表 http://www.autoitx.com/images/common/back.gif
#include
#include
Dim $szDrive, $szDir, $szFName, $szExt
$TestPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
_ArrayDisplay($TestPath,"Demo _PathSplit()")

好像沒一個屬性是檔案的FullName(不包含Path)的@@..
不過小弟剛接觸au3...現在又多認識一個UDF(File.au3)了..


小弟錯了...原來$szFName, $szExt 加起來就是了....
$TestPath的第3及4個也是同理

[ 本帖最后由 getcase 于 2008-5-27 16:39 编辑 ]

meteorln 发表于 2008-10-22 10:37:48

嘿嘿,人都来齐了

apanworkroom 发表于 2008-10-22 13:11:19

回复 1# Netfox 的帖子

$path="c:autoitkernelkernel.exe"

Dim $info = [$path, _
                StringMid($info, 1, StringInStr($info, "", 0, -1) - 1), _
                StringMid($info, StringInStr($info, "", 0, -2) + 1, StringInStr($info, "", 0, -1) - StringInStr($info, "", 0, -2) - 1), _
                StringMid($info, StringInStr($info, "", 0, -3) + 1, StringInStr($info, "", 0, -2) - StringInStr($info, "", 0, -3) - 1), _
                StringMid($info, StringInStr($info, "", 0, -1) + 1), _
                StringMid($info, 1, StringInStr($info, ".", 0, -1) - 1), _
                StringReplace(StringMid($info, StringInStr($info, ".", 0, -1) + 1), $info, "") ]

;全部一起解决++++++++++++++
;$info 完整文件路径
;$info 文件路径
;$info 文件夹
;$info 上一级文件夹
;$info 完整文件名
;$info 文件名
;$info 扩展名

gzken 发表于 2008-10-23 09:36:07

原帖由 Netfox 于 2008-5-27 15:24 发表 http://www.autoitx.com/images/common/back.gif
请教一下大伙儿,比如我有一字符串c:\autoit\kernel\kernel.exe
怎么能得到kernel.exe这个文件名呢 ,谢谢。

利用正则表达式的贪婪性如何?
MsgBox(0,"test",StringRegExpReplace("c:\autoit\kernel\kernel.exe",".*\\",""));

不用正则表达式的贪婪性:
MsgBox(0,"test",StringRegExpReplace("c:\autoit\kernel\kernel.exe",".*\\(?=[^\\]*$)",""));

[ 本帖最后由 gzken 于 2008-10-23 10:18 编辑 ]

ceoguang 发表于 2008-10-31 10:56:40

呵呵,引贴真人齐!!
页: [1]
查看完整版本: 如何从字符串中获取文件名