找回密码
 加入
搜索
查看: 20333|回复: 49

[效率算法] 【已解决】短文件获取的相关问题。用到Afan的UDF

 火.. [复制链接]
发表于 2010-10-20 12:43:44 | 显示全部楼层 |阅读模式
本帖最后由 chenronting 于 2010-10-22 23:14 编辑

下面帖上源码。还有Afan前辈的UDF 。
我是在D盘新建一个畸形文件夹。再用Afan的UDF来获取
也用过 FileGetshortName 猎取
回值都为0
望大家有空帮我看看
还有, 我用dircreate建立的其中一个文件夹用CMD重设属性(ARSH)
都无法成功,提示:无法更改属性 —
就这么一个前次建立起来的文件夹有问题。
以前试过用AU3的 filesetattrib 可以改
现在这个文件夹没试, 想把它留下。研究
在Afan的帮助下, 已经解决了。答案在33#
$_weizi = 'D:\'
$_filename = '爱什么是什么........'
DirCreate($_weizi & $_filename & './')
$_duan8 = _FileGetShortName($_weizi & $_filename)
MsgBox(0, '', $_duan8)

Func _FileGetShortName($FilePath, $Flag = 1)
        $FilePath = StringRegExpReplace($FilePath, '\\+, '')
        If $Flag <> 1 Then $Flag = 0
        If FileExists($FilePath) And Not StringRegExp($FilePath, '\.+) Then
                If $Flag = 1 Then Return FileGetShortName($FilePath, 1)
                Return StringRegExpReplace(FileGetShortName($FilePath, 1), '.+\\', '')
        EndIf
        Local $Path, $File
        If StringInStr($FilePath, ':') Then
                $Path = StringRegExpReplace($FilePath, '\\[^\\]+, '')
                $File = StringRegExpReplace($FilePath, '.+\\', '')
        Else
                $Path = @ScriptDir
                If StringInStr($FilePath, '\') Then $Path &= '\' & StringRegExpReplace($FilePath, '\\[^\\]+, '')
                $File = StringRegExpReplace($FilePath, '.+\\', '')
        EndIf
        $File = StringRegExpReplace($File, '(\.|\+|\(|\)|\{|\}|\[|\]|\^|\$)', '\\$1')
        Local $str = '', $too
        $too = Run(@ComSpec & ' /c dir /A /x "' & $Path & '"', '', 0, 2)
        While 1
                Sleep(1)
                $str &= StdoutRead($too)
                If @error Then ExitLoop
        WEnd
        If Not StringRegExp($str, '<DIR>.+\s' & $File & '\r') Then Return SetError(1, 0, 0)
        Local $ShortName = StringRegExpReplace($str, '(?s).+<DIR>\s+?([^\s]+)\s+?' & $File & '.+', '$1')
        If @extended = 0 Then Return SetError(1, 0, 0)
        If $Flag = 1 Then Return FileGetShortName($Path, 1) & '\' & $ShortName
        Return $ShortName
EndFunc   ;==>_FileGetShortName

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-10-20 12:46:40 | 显示全部楼层
我这返回正常哦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-10-20 13:42:01 | 显示全部楼层
...还有, 我用dircreate建立的其中一个文件夹用CMD重设属性(ARSH)
都无法成功...chenronting 发表于 2010-10-20 12:43



    结合这一点,似乎问题出在你的“cmd.exe”上
 楼主| 发表于 2010-10-20 16:38:03 | 显示全部楼层
CMD也有不同的区别吗。 我这里是XP SP3,感觉这种东西没人会去修改他吧,还有我这里应该是没有中毒的
 楼主| 发表于 2010-10-20 16:38:18 | 显示全部楼层
回复 3# afan


    CMD也有不同的区别吗。 我这里是XP SP3,感觉这种东西没人会去修改他吧,还有我这里应该是没有中毒的
 楼主| 发表于 2010-10-20 21:12:24 | 显示全部楼层
回复 3# afan


    可能是真的,有什么方法解决吗。唉。我在另一台上也可以~郁闷
 楼主| 发表于 2010-10-20 21:12:57 | 显示全部楼层
回复 3# afan


    难道要包含一个CMD程序进去?。
发表于 2010-10-20 21:51:50 | 显示全部楼层
回复  afan


    难道要包含一个CMD程序进去?。
chenronting 发表于 2010-10-20 21:12


这就不清楚了,不过可能不是cmd.exe本身的问题,不知道是否和什么权限有关。
发表于 2010-10-21 14:29:59 | 显示全部楼层
一样  文件夹可以建立  返回值都是0
 楼主| 发表于 2010-10-21 16:59:29 | 显示全部楼层
回复 9# shano


    你好, 你能提供一下你运行代码的环境吗,是什么系统,SP几的,是什么帐号运行的等...谢谢
 楼主| 发表于 2010-10-21 17:00:32 | 显示全部楼层
回复 8# afan


    权限你是指帐号吗.两台电脑都是用的admin帐号运行的代码.不知道还有别的什么区别?
发表于 2010-10-21 17:18:15 | 显示全部楼层
XP SP2  管理员账号

评分

参与人数 1金钱 +10 收起 理由
chenronting + 10 谢谢你.

查看全部评分

 楼主| 发表于 2010-10-21 17:20:14 | 显示全部楼层
回复 12# shano


    谢谢你.
发表于 2010-10-21 17:38:00 | 显示全部楼层
回复 11# chenronting


    直接
$Path = 'c:\'
Run(@ComSpec & ' /c dir /A /x "' & $Path & '" &pause')
看看显示短文件名是否正常
 楼主| 发表于 2010-10-21 17:49:23 | 显示全部楼层
回复 14# afan


    文件名回来的都是正常的. 不知道你那个UDF里的是怎么取得短文件名的.现在我这台可以的,也无法得到短文件名了.还有, 是不是跟我用 DirCreate 建立目录有关?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 03:57 , Processed in 0.102596 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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