chenronting 发表于 2010-10-20 12:43:44

【已解决】短文件获取的相关问题。用到Afan的UDF

本帖最后由 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

afan 发表于 2010-10-20 12:46:40

我这返回正常哦

afan 发表于 2010-10-20 13:42:01

...还有, 我用dircreate建立的其中一个文件夹用CMD重设属性(ARSH)
都无法成功...chenronting 发表于 2010-10-20 12:43 http://www.autoitx.com/images/common/back.gif


    结合这一点,似乎问题出在你的“cmd.exe”上

chenronting 发表于 2010-10-20 16:38:03

CMD也有不同的区别吗。 我这里是XP SP3,感觉这种东西没人会去修改他吧,还有我这里应该是没有中毒的

chenronting 发表于 2010-10-20 16:38:18

回复 3# afan


    CMD也有不同的区别吗。 我这里是XP SP3,感觉这种东西没人会去修改他吧,还有我这里应该是没有中毒的

chenronting 发表于 2010-10-20 21:12:24

回复 3# afan


    可能是真的,有什么方法解决吗。唉。我在另一台上也可以~郁闷

chenronting 发表于 2010-10-20 21:12:57

回复 3# afan


    难道要包含一个CMD程序进去?。

afan 发表于 2010-10-20 21:51:50

回复afan


    难道要包含一个CMD程序进去?。
chenronting 发表于 2010-10-20 21:12 http://www.autoitx.com/images/common/back.gif

这就不清楚了,不过可能不是cmd.exe本身的问题,不知道是否和什么权限有关。

shano 发表于 2010-10-21 14:29:59

一样文件夹可以建立返回值都是0

chenronting 发表于 2010-10-21 16:59:29

回复 9# shano


    你好, 你能提供一下你运行代码的环境吗,是什么系统,SP几的,是什么帐号运行的等...谢谢

chenronting 发表于 2010-10-21 17:00:32

回复 8# afan


    权限你是指帐号吗.两台电脑都是用的admin帐号运行的代码.不知道还有别的什么区别?

shano 发表于 2010-10-21 17:18:15

XP SP2管理员账号

chenronting 发表于 2010-10-21 17:20:14

回复 12# shano


    谢谢你.

afan 发表于 2010-10-21 17:38:00

回复 11# chenronting


    直接$Path = 'c:\'
Run(@ComSpec & ' /c dir /A /x "' & $Path & '" &pause')看看显示短文件名是否正常

chenronting 发表于 2010-10-21 17:49:23

回复 14# afan


    文件名回来的都是正常的. 不知道你那个UDF里的是怎么取得短文件名的.现在我这台可以的,也无法得到短文件名了.还有, 是不是跟我用 DirCreate 建立目录有关?
页: [1] 2 3 4
查看完整版本: 【已解决】短文件获取的相关问题。用到Afan的UDF