本帖最后由 mys_jaqal 于 2010-10-29 15:14 编辑
代码已经重新修改 添加了中文字符判断和畸形文件夹判断
非常感谢各位前辈的关注和帮助
; =====================================================
;
; 函数说明:JPathToDos("路径") 返回Windows下长路径的Dos路径字符窜.
; 详细信息:请输入完整路径.如"c:\asdfg\qwe\"或"c:\asdfg\qwe\asd.txt"
; 返回值 :Dos路径字符窜.
;
; =====================================================
Func PathToDos($JPath)
;用"\"将路径分割
Local $JSplit = StringSplit($JPath, "\")
Local $Ji
Local $JDos
Local $JDot
Local $ZHCN
;开始组合
For $Ji = 2 To $JSplit[0]
;用"."分割得到的字符串
$JDot = StringSplit($JSplit[$Ji], ".")
;如果含有中文最多返回前3个字符
If StringIsASCII($JSplit[$Ji]) = 0 Then
$JSplit[$Ji] = StringLeft($JSplit[$Ji], 3) ;如果含有中文字符直接阉割
;用于标识进行分割字符的是中文
$ZHCN = 1
Else
$ZHCN = 0
EndIf
;如果用"\"分割后的字符窜段不是最后一段则进行超长判断
If $Ji <> $JSplit[0] Then
If $JDot[0] >= 2 And $JDot[2] = "" Then ;如果含有畸形路径 如"d:\OneKeyGhost.\" 则用"."分割后第二段字符为空
;删除其中的"."
$JSplit[$Ji] = StringReplace($JSplit[$Ji], ".", "")
EndIf
If $ZHCN = 1 Then
$JDos = $JDos & $JSplit[$Ji] & '~1\' ;如果含有中文字符输出阉割后的字符
ElseIf StringLen($JSplit[$Ji]) > 8 Then
$JDos = $JDos & StringLeft($JSplit[$Ji], 6) & '~1\' ;超长就阉割后组合输出
Else
If $JDot[0] >= 2 And $JDot[2] = "" Then
$JDos = $JDos & $JSplit[$Ji] & "~1\" ;如果含有畸形路径且不超长就加"~1\"组合输出
Else
$JDos = $JDos & $JSplit[$Ji] & "\" ;不超出就直接组合输出
EndIf
EndIf
Else
;如果是最后一段
If $JSplit[$Ji] = "" Then
$JDos = $JDos ;不在有字符则直接输出
Else
;先删除最后一个点和以后的内容
$JSplit[$Ji] = StringReplace($JSplit[$Ji], '.' & $JDot[$JDot[0]], "", -1)
;有字符串则判断是否超长
If $ZHCN = 1 Then
$JDos = $JDos & $JSplit[$Ji] & '~1.' & $JDot[$JDot[0]] ;如果含有中文字符直接阉割后加上后缀名组合输出
ElseIf StringLen($JSplit[$Ji]) > 8 Then
$JDos = $JDos & StringLeft($JSplit[$Ji], 6) & '~1.' & $JDot[$JDot[0]] ;超长就阉割后加上后缀名组合输出
Else
$JDos = $JDos & $JSplit[$Ji] & '.' & $JDot[$JDot[0]] ;不超出就加上后缀名组合输出
EndIf
EndIf
EndIf
Next
Return $JSplit[1] & '\' & $JDos
EndFunc ;==>PathToDos
|