本帖最后由 C.L 于 2010-3-31 22:37 编辑
现在总结一下,畸形文件夹短文件名:
1、文件名中有.和空格的(除最后的一个),短文件名会去掉"."和空格,去除以后的文件名大于6的,第7个字符开始被删除,后面加上~1,如果有同名文件存在,则累加,累加至~4,则变成另一种命令方式;去除"."和空格后,少于6个字符的,则直接在后面接上~1,如果有同名,则累加,(累加至~4,则变成另一种命令方式?未测试)
2、文件名小于3(带".")时,命令规则未知)
3、中文带.文件名是否和以上命名规则相同,未测试。
以上总结,在此做个记号。目前我的能力只能做到这点了, 呵呵,afan,请别见怪。
更改一下代码,增加空格的处理:$f = InputBox ("目录名" ,'目录名(目录名不要带"/"或""):')
If $f = "" And StringRight($f,1)<> "." Then Exit
If StringLen($f)<3 Then
MsgBox (0,"","你建的目录实在是太变态了,拒绝执行")
Exit
EndIf
RunWait(@ComSpec & ' /C Md "' & $f & '."', '', 0)
$Sn = getShutName ($f)
Run (@ComSpec &" /c dir /x & pause")
$y=MsgBox (4,$f&"的短文件名是",$Sn&@CRLF&"是否要删除畸形目录?")
If $y = 6 Then RunWait(@ComSpec & ' /C rd /q /s "' & $f & '."', '', 0)
If $y = 7 Then Exit
Func getShutName ($filename)
$split = StringReplace ($filename,".","")
$split = StringReplace ($split," ","")
MsgBox (0,"",$split)
For $i=1 To 6
$fShutname = StringLeft($split,6) & "~"&$i
$filepath = @ScriptDir
If StringRight ($filepath,1) == "" Then $filepath = StringTrimRight ($filepath,1)
$ln = FileGetLongName ($fShutname,1)
MsgBox (0,"",$fShutname&@CRLF&$ln&@CRLF&$filepath&""&$filename)
If $ln == $filepath&""&$filename Then
Return ($fShutname)
EndIf
If $ln = $fShutname Then Return "没有获取短文件名"
Next
EndFunc
|