中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-07 11:13
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 仿TREE无限级树状html菜单生成 查看 1,272 回复 11
楼 主 仿TREE无限级树状html菜单生成 发表于 2007-12-27 00:17 ·  中国 广东 广州 花都区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
学习了mkd先前发布的代码,又在网上搜到一个html脚本,写出了这个

@echo off
if "%~1" == "" (call "%~f0" "%cd%"&goto :eof) else (pushd "%~1"||goto :eof)
set "str=^-^\^|^/"&&set/a sx=0,sy=0,sz=0&&set ot=%~nx1.htm
for /f "delims=:" %%i in ('findstr /b /n ":top" "%~f0"') do more +%%i "%~f0">%ot%
set/p=...................................<nul&call :subdir "%~1"
for /f "delims=:" %%x in ('findstr /b "::" "%~f0"') do echo %%x >>%ot%
echo .Done...&pause>nul&start "" "%ot%"&popd&goto :eof

:subdir
set/asx+=1,sy=sx%%4*2,sz=1/sx&&set tpath=%~1
set tpath=%tpath:\=\\%&&call set/p=%%str:~%sy%,2%%<nul
echo ss.m^("%~nx1","'%tpath%' title='Date:%~t1 %~a1'",1,%sz%^);>>%ot%
echo ss.cStart^(%sz%^);>>%ot%
for %%a in ("%~1\*") do call echo ss.m^("%%~nxa","'%tpath%' title='Date:%%~ta Size:%%~zaByte'",0^);>>%ot%
for /d %%a in ("%~1\*") do call :subdir "%%~fa"&echo ss.cEnd^(^);>>%ot%
goto :eof
:bottom
::ss.cEnd();
::ss.end();
::</script>
::</body></html>
:top
<html>
<head>
<title>Tree Menu::www.cn-dos.net</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type=text/css>
a {font: normal 12px 宋体; color: black; text-decoration: none; }
a:link {font: normal 12px 宋体; color: black; text-decoration: none; }
a:visited {font: normal 12px 宋体; color: black; text-decoration: none; }
a:hover {font: normal 12px 宋体; color: black; text-decoration: none; }
.icoface { border: 1px solid black; width: 9px; height: 9px; overflow: hidden; font: normal 7px 宋体; line-height: 8px; text-align: center; cursor: default; }
.line-hight { font: normal 8px 宋体; }
.newcss { font: normal 12px 宋体; color: black; text-decoration: none; }
</style>
<script language=javascript>
function s()
{
this.start=function()
{
document.writeln("<table cellpadding=1 cellspacing=0>");
}
this.end=function()
{
document.writeln("</table>");
}
this.m=function(cText,cLink,bc,bShow)
{
document.writeln("<tr><td><nobr><span class=icoface"+(bc?" onclick=menuChange(this)":"")+">"
+(bc?(bShow?"-":"+"):"<font color=#0080ff>f</font>")+"</span><span class=line-hight> </span><span class=newcss"+(bc?" onclick=menuChange(this)":"")+">"+cText+"</span></td><td>&nbsp<a href="+cLink+" target=_blank><font class=line-hight>more</font></a></nobr></td></tr>");
}
this.cStart=function(bShow)
{
document.writeln("<tr style='display:"+(bShow?"block":"none")+"'><td>");
document.writeln("<table cellpadding=1 cellspacing=0 style='margin-left:12px;'>");
}
this.cEnd=function()
{
document.writeln("</table>");
document.writeln("</td></tr>");
}
}
function menuChange(obj)
{
obj=obj.parentNode.parentNode.parentNode;
obj.nextSibling.style.display=(obj.nextSibling.style.display=='none'?'block':'none');
obj.cells.childNodes.childNodes.innerText=(obj.nextSibling.style.display=='none'?'+':'-')
}
</script>
</head>
<body>
<script language=javascript>
var ss=new s();
ss.start();

js脚本按zh159的修改,另文件夹点击展开菜单

[ Last edited by everest79 on 2007-12-27 at 08:50 PM ]
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
zh159 +10 2007-12-27 09:48
cooray +2 2008-01-30 01:37
2 发表于 2007-12-27 09:47 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
改一下:
more +36 trees.cmd>trf.htm 改为 more +36 "%~nx0">trf.htm
这样可以用自定义名称的 bat 或 cmd,否则如果批处理名称不是 trees.cmd 就会出错
3 发表于 2007-12-27 09:50 ·  中国 广东 广州 花都区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
昨晚只是在当前目录下试了正常,今天在批处理中调用就不行了,刚改了,谢谢指正
4 发表于 2007-12-27 09:55 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
收藏备用
5 发表于 2007-12-27 10:08 ·  中国 广东 广州 花都区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
还有个问题没有解决,当目录名为
C:\path path\new path.path
这样时路径扩展会不正常
会将最后一个不规范的路径当作文件来处理
6 发表于 2007-12-27 17:34 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
再改,加了文件大小与时间
7 发表于 2007-12-27 19:07 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
修改三个地方,效果会好些
.icoface { border: 1px solid black; width: 9px; height: 9px; overflow: hidden; font: normal 9px 宋体; line-height: 8px; text-align: center; cursor: default; }


+(bc?(bShow?"-":"+"):"<font color=#0080ff>f</font>")+"</span><span class=line-hight> </span><a href="+cLink+" target=_blank>"+cText+"</a></nobr></td></tr>");


obj.cells.childNodes.childNodes.innerText=(obj.nextSibling.style.display=='none'?'+':'-')

改为生成HTA的
@echo off
if "%~1" == "" (call "%~0" "%cd%"&goto :eof) else (pushd "%~1"||goto :eof)
set "str=^-^\^|^/"&&set/a sx=0,sy=0,sz=0&&set ot=%~nx1.hta
for /f "delims=:" %%i in ('findstr /b /n ":top" "%~f0"') do more +%%i "%~f0">%ot%
set/p=...................................<nul&call :subdir "%~1"
for /f "delims=:" %%x in ('findstr /b "::" "%~f0"') do echo %%x >>%ot%
echo .Done...&pause>nul&start %ot%&popd&goto :eof

:subdir
set/asx+=1,sy=sx%%4*2,sz=1/sx&&set tpath=%~1
set tpath=%tpath:\=\\%&&call set/p=%%str:~%sy%,2%%<nul
echo ss.m^("%~nx1","'%tpath%' title='Date:%~t1 %~a1'",1,%sz%^);>>%ot%
echo ss.cStart^(%sz%^);>>%ot%
for %%a in ("%~1\*") do call echo ss.m^("%%~nxa","'%tpath%' title='Date:%%~ta Size:%%~zaByte'",0^);>>%ot%
for /d %%a in ("%~1\*") do call :subdir "%%~fa"&echo ss.cEnd^(^);>>%ot%
goto :eof
:bottom
::ss.cEnd();
::ss.end();
::</script>
::</body></html>
:top
<html>
<head>
<title>Tree Menu::www.cn-dos.net</title>

<HTA:APPLICATION
APPLICATIONNAME="Tree Menu::www.cn-dos.net"
INNERBORDER="no"
/>

</hrad>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type=text/css>
a {font: normal 12px 宋体; color: black; text-decoration: none; }
a:link {font: normal 12px 宋体; color: black; text-decoration: none; }
a:visited {font: normal 12px 宋体; color: black; text-decoration: none; }
a:hover {font: normal 12px 宋体; color: black; text-decoration: none; }
.icoface { border: 1px solid black; width: 9px; height: 9px; overflow: hidden; font: normal 9px 宋体; line-height: 8px; text-align: center; cursor: default; }
.line-hight { font: normal 8px 宋体; }
</style>
<script language=javascript>

width = window.screen.width;
height = window.screen.height-30;
window.resizeTo(width,height);
ileft=(window.screen.width-width)/2;
itop=(window.screen.height-height)/2-15;
window.moveTo(ileft,itop);

function s()
{
this.start=function()
{
document.writeln("<table cellpadding=1 cellspacing=0>");
}
this.end=function()
{
document.writeln("</table>");
}
this.m=function(cText,cLink,bc,bShow)
{
document.writeln("<tr><td><nobr><span class=icoface"+(bc?" onclick=menuChange(this)":"")+">"
+(bc?(bShow?"-":"+"):"<font color=#0080ff>f</font>")+"</span><span class=line-hight> </span><a href="+cLink+" target=_blank>"+cText+"</a></nobr></td></tr>");
}
this.cStart=function(bShow)
{
document.writeln("<tr style='display:"+(bShow?"block":"none")+"'><td>");
document.writeln("<table cellpadding=1 cellspacing=0 style='margin-left:12px;'>");
}
this.cEnd=function()
{
document.writeln("</table>");
document.writeln("</td></tr>");
}
}
function menuChange(obj)
{
obj=obj.parentNode.parentNode.parentNode;
obj.nextSibling.style.display=(obj.nextSibling.style.display=='none'?'block':'none');
obj.cells.childNodes.childNodes.innerText=(obj.nextSibling.style.display=='none'?'+':'-')
}
</script>
</head>
<body bgcolor="#f0f0f0">
<script language=javascript>
var ss=new s();
ss.start();


[ Last edited by zh159 on 2007-12-27 at 07:08 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
everest79 +15 2007-12-27 19:40
8 发表于 2007-12-27 19:40 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
这个界面看起来好行多
能不能将路径逐级累进,这样就可以节省不少空间
还有在菜单文本上能不能实现点+号的效果,而不是超链接,将链接移到后一个固定符号上呢?
还有我在网上看到HTA标签里可以设置图标,我也么不起作用?非要用ico文件吗?
9 发表于 2007-12-27 20:52 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线

<HTA:APPLICATION
APPLICATIONNAME="Tree Menu::www.cn-dos.net"
INNERBORDER="no"
ICON="C:\\windows\\system32\\cmd.exe"
/>

加了一个图标,原来是任务栏的小图标,嘿嘿


this.m=function(cText,cLink,bc,bShow)
{
document.writeln("<tr><td><nobr><span class=icoface"+(bc?" onclick=menuChange(this)":"")+">"
+(bc?(bShow?"-":"+"):"<font color=#0080ff>f</font>")+"</span><span class=line-hight> </span><span class=newcss"+(bc?" onclick=menuChange(this)":"")+">"+cText+"</span></td><td>&nbsp<a href="+cLink+" target=_blank><font class=line-hight>more</font></a></nobr></td></tr>");
}

将超链接移到后边,点文件夹将展开菜单
10 发表于 2007-12-27 21:20 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
其实稍加修改这个左侧的列表就行了,速度也很快,也可以加入文件定位链接

文本代码管理工具(笨狼代码大管家)

PS:各位自己学着弄吧...
11 发表于 2007-12-28 12:13 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
嘿嘿,刚开始是批处理代码,被你一引诱,又到这上边了
12 发表于 2008-01-30 01:40 ·  中国 北京 教育网
初级用户
积分 71
发帖 34
注册 2007-09-07 18:08
18年会员
UID 96808
性别 男
状态 离线
好东西,终于有了结点可以点的tree了~^_^
论坛跳转: