关于递归文件目录生成菜单的问题

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

fantasyhk
Posts: 20
Joined: 16 Apr 2022, 06:30

关于递归文件目录生成菜单的问题

22 Apr 2022, 06:39

大家好,我参考了一位网友的代码:

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)
这样所有菜单名称都是完整路径名,就不会有重复值,同时展示菜单后,点击某个菜单也方便获取其完整路径。
我的问题是,这样做的话,显的菜单比较另类,有没有更好的方法,即能让菜单项只显示文件或文件夹的名称而非完整路径,又可以点击后获取到该文件或文件夹的完整路径?
Guest

Re: 关于递归文件目录生成菜单的问题

13 Sep 2022, 01:02

这个我也试过,运行有问题,代码逻辑还不清晰
fwejifjjwk2
Posts: 89
Joined: 10 Aug 2019, 01:49

Re: 关于递归文件目录生成菜单的问题

08 Nov 2022, 00:25

by ahk v2

Code: Select all

#z::
{
WhichFolder := DirSelect()
Msgbox (WhichFolder)
}
menu 重名不會有問題,但是有其它的侷限,所以你需要的功能不太適合用 menu 寫。

Return to “请求帮助”

Who is online

Users browsing this forum: No registered users and 11 guests