找回密码
 加入
搜索
查看: 3390|回复: 11

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

[复制链接]
发表于 2008-5-27 15:24:57 | 显示全部楼层 |阅读模式
请教一下大伙儿,比如我有一字符串c:\autoit\kernel\kernel.exe
怎么能得到kernel.exe这个文件名呢 ,谢谢。

[ 本帖最后由 Netfox 于 2008-5-27 15:49 编辑 ]
发表于 2008-5-27 15:34:03 | 显示全部楼层
$arr = StringSplit("c:\autoit\kernel\kernel.exe", "\")
Msgbox(0, "", $arr[UBound($arr) -1])
发表于 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[0]])


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

[ 本帖最后由 漠北雪~狼 于 2008-5-27 15:37 编辑 ]
 楼主| 发表于 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[1]
         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 编辑 ]
 楼主| 发表于 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[0]])
发表于 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()")
发表于 2008-5-27 16:36:34 | 显示全部楼层
原帖由 sanhen 于 2008-5-27 16:18 发表
#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 编辑 ]
发表于 2008-10-22 10:37:48 | 显示全部楼层
嘿嘿,人都来齐了
发表于 2008-10-22 13:11:19 | 显示全部楼层

回复 1# Netfox 的帖子

$path="c:autoitkernelkernel.exe"

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

;全部一起解决++++++++++++++
;$info[0] 完整文件路径
;$info[1] 文件路径
;$info[2] 文件夹
;$info[3] 上一级文件夹
;$info[4] 完整文件名
;$info[5] 文件名
;$info[6] 扩展名
发表于 2008-10-23 09:36:07 | 显示全部楼层
原帖由 Netfox 于 2008-5-27 15:24 发表
请教一下大伙儿,比如我有一字符串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 编辑 ]
发表于 2008-10-31 10:56:40 | 显示全部楼层
呵呵,引贴真人齐!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-2 09:19 , Processed in 0.102550 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表