Code: Select all
/*----------------------说明--------------------------
作用:根据提供的目录生成菜单。子目录以子菜单的形式体现;
点击菜单显示菜单名;
作者:zhanglei1371
QQ:625289295
----------------------------------------
*/
fod=C:\Screen Recorder ;测试目录
createmenu(fod)
Menu,% regexreplace(fod,".+\\(.+)(\\)?$","$1"),show
return
createmenu(fod){ ;感谢网友Troy_Daniel的修正
Loop ,%fod%\*.*,1
{
myMenu:=(myMenu=""?RegExReplace(fod,".+\\(.+)(\\)?$","$1"):myMenu)
if (FileExist(A_LoopFileFullPath)<>"D"){ ;否则若遍历到文件则创建文件菜单
Menu,%myMenu%,add,%A_LoopFileName%,getname
}
else ;若遍历到目录,则创建子菜单
{
If ((ofn := createmenu(A_LoopFileFullPath)) == ""){
Menu, %A_LoopFileName%, Add
ofn := A_LoopFileName
}
Menu,%myMenu%,add,%ofn%,:%ofn%
}
}
return mymenu
}
getname:
MsgBox % A_ThisMenuItem
return
c:\folderA
c:\folderA\folderB
c:\folderA\folderB\folderA
他的脚本就会报错,因为 menu, folderA 有两个地方,不能同时即作为子菜单,又作为父菜单。为了解决这个问题,我把
myMenu:=(myMenu=""?RegExReplace(fod,".+\\(.+)(\\)?$","$1"):myMenu)
改为:
myMenu:=(myMenu=""?fod:myMenu)
这样所有菜单名称都是完整路径名,就不会有重复值,同时展示菜单后,点击某个菜单也方便获取其完整路径。
我的问题是,这样做的话,显的菜单比较另类,有没有更好的方法,即能让菜单项只显示文件或文件夹的名称而非完整路径,又可以点击后获取到该文件或文件夹的完整路径?