无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: mdyblog
打印 上一主题 下一主题

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
9241#
发表于 2015-4-12 08:30:15 | 只看该作者
mdyblog 发表于 2015-4-11 20:21
//ShowType 磁盘号  分区类型
_SUB ShowType
        ENVI^ FORCELOCAL=1

再请教:
1. 此代码只能查找磁盘0,如果改为 ShowType f:0 则CALC 不识别,
2. 已挂载分区会重复挂载
3. 卸载指定类型分区怎么处理
涉及磁盘分区操作,实在不敢随便玩,多谢

点评

1: 这个只是抛砖引玉。 稍改改, 你说的都能达到。 2:这样,一会改点. 谁这么都时间来陪啊?(又不是3陪) 自己看看说明书改改,是可以的,你行的!  详情 回复 发表于 2015-4-12 09:37
回复

使用道具 举报

9242#
 楼主| 发表于 2015-4-12 09:37:09 | 只看该作者
feiyike 发表于 2015-4-12 08:30
再请教:
1. 此代码只能查找磁盘0,如果改为 ShowType f:0 则CALC 不识别,
2. 已挂载分区会重复挂载

1:
这个只是抛砖引玉。
稍改改, 你说的都能达到。


2:这样,一会改点.
谁这么都时间来陪啊?(又不是3陪)

自己看看说明书改改,是可以的,你行的!

点评

多谢,弄懂了一点 再麻烦下,怎么弹出提示,比如“未找到指定类型分区.....” //加载ESP分区 _SUB ShowType //先判断GPT磁盘,再判断分区 ENVI^ FORCELOCAL=1 ENVI &&mtp=%~1  详情 回复 发表于 2015-4-13 09:08
回复

使用道具 举报

9243#
发表于 2015-4-12 10:37:14 | 只看该作者
本帖最后由 ling3882688 于 2015-4-12 10:42 编辑

_SUB ListPPt
        ENVI^ FORCELOCAL=1
        SET &hd=%~1
        CALC #hd=%hd%
        PART list part %hd%,&&pts
        SET &nall=0
        SET &nmain=0
        FORX * %pts%,&&pt,
        {
            LSTR &&c0=1,%pt%
            FIND $%c0%=@, EXIT -  //扩展
            TEAM  PART -phy# list part %hd%:%pt%,&&v1| MSTR &<p,&&ppt=<2><8>%v1%
            IFEX $%ltp%<1, EXIT -
            CALC nall=%nall% + 1
            IFEX $%ppt%<=4,  CALC nmain=%nmain% + 1
        }
        ENVI-ret %~2=%nall%   %nmain%
_END
ListPPt 0 &&ppts
MSTR 分区数,主分区数=<1*>%&ppts%
MESS %分区数%   %主分区数%

这个磁盘分区上应该是有3个主分区,但是用上面代码判断出来是2个。能力有限代码只能看懂一部分。

磁盘:0
  磁盘信息 磁盘号   大小(字节)         柱面数 磁头数 扇数 扇区 媒体     签名 总线
              0   121332826112          14751    255   63  512   12 58D160F1-FAEA-4A53-B52F-C601FA7ABE2E 11 GPT F
  字符说明 激活 __本分区起始__ 分区 __本分区结束__ _______本分区______ ______本分区_______
  激活为0x80    磁头_扇区_柱面 类型 磁头_扇区_柱面 _____起始扇区号____ _____扇区总数______
  主分区1: 0x00 0xFE 0xFF 0xFF 0xEE 0xFE 0xFF 0xFF 0x01 0x00 0x00 0x00 0xFF 0xFF 0x1F 0x0E
  主分区2: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  主分区3: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  主分区4: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  标志   : 0x55 0xAA
  全部分区: 1   2   3
  分区  类型 激活(1) 起始(字节)     长度(字节)    隐藏扇区     结尾(字节) 物理# 盘符
     1  C12A7328-F81F-11D2-BA4B-00A0C93EC93B GPT          20480      209715200 0000000000000000 70A5E681-5A17-4C8D-B362-018819F9FD1E   1   
     2  53746F72-6167-11AA-AA11-00306543ECAC GPT      209735680   120473067520 0000000000000000 9BE3621D-53F9-410C-813A-00707024AACC   2   
     3  426F6F74-0000-11AA-AA11-00306543ECAC GPT   120682803200      650002432 0000000000000000 58DC0825-5D12-44C6-8335-97F00E50A983   3   



点评

这个是GPT。 上面是MBR.mBR才有主分区一说。  详情 回复 发表于 2015-4-12 14:56
回复

使用道具 举报

9244#
发表于 2015-4-12 11:24:02 | 只看该作者
本帖最后由 hhh333 于 2015-4-12 11:32 编辑

鉴于LZ旺盛的精力与超高的技术水平,有两个问题提出来供研究:
1、关于Win81/10PE刷新的问题,我已经发帖了,现在主要是要找到一个方法检测桌面有没有图标再执行刷新;
2、同样的代码切换到Administrator,在Win8PE中无问题,但在Win8.1PE中会在登录界面停下来,这时调出任务管理器,可以看到Administrator已登录,点击也可以进,但进入后kill explorer几次后,explorer就再不能自动启动了,这应该是用户级的SHEL还有问题。

以上两个问题,可以到我的主题中下载我做好的8.1PE进行测试。先用8.1用一下,到时win10可能用得上。

总是停在上述界面

任务管理中切换用户发现已经登录,点击可以进入

点评

Win8PE中无问题,但在Win8.1PE --------- 8PE 是PE。 “登陆”是PECMD支撑的。 8.1PE 不是PE。,是RAMOS。 “登陆”是系统自身的。PECMD只是登陆后的1个APP。 “登陆”和PECMD无关吧。  详情 回复 发表于 2015-4-12 15:02
回复

使用道具 举报

9245#
 楼主| 发表于 2015-4-12 14:56:16 | 只看该作者
ling3882688 发表于 2015-4-12 10:37
_SUB ListPPt
        ENVI^ FORCELOCAL=1
        SET &hd=%~1

这个是GPT。
上面是MBR.mBR才有主分区一说。

点评

嗯,这个我知道,GPT分区的话需要怎么改一下呢?我是想获取分区数量,当然针对MBR的话获取主分区和逻辑分区数量,GPT的话就是获取分区数量因为没有扩展分区所以不用再进一步判断了。  详情 回复 发表于 2015-4-12 15:00
回复

使用道具 举报

9246#
发表于 2015-4-12 15:00:46 | 只看该作者
本帖最后由 ling3882688 于 2015-4-12 15:01 编辑
mdyblog 发表于 2015-4-12 14:56
这个是GPT。
上面是MBR.mBR才有主分区一说。


嗯,需要怎么改一下呢使得GPT分区的话分区数量显示也准确呢?我是想获取分区数量,当然针对MBR的话获取主分区和逻辑分区数量,GPT的话就是获取分区数量因为没有扩展分区所以不用再进一步判断了。

点评

LIST 磁盘的时候,有个字段 GPT、MBR 分开来计算就是了。  详情 回复 发表于 2015-4-12 15:47
回复

使用道具 举报

9247#
 楼主| 发表于 2015-4-12 15:02:27 | 只看该作者
hhh333 发表于 2015-4-12 11:24
鉴于LZ旺盛的精力与超高的技术水平,有两个问题提出来供研究:
1、关于Win81/10PE刷新的问题,我已经发帖 ...

Win8PE中无问题,但在Win8.1PE
---------
8PE 是PE。 “登陆”是PECMD支撑的。
8.1PE 不是PE。,是RAMOS。 “登陆”是系统自身的。PECMD只是登陆后的1个APP。 “登陆”和PECMD无关吧。

点评

我这里没有讨论8.1的ramos,只讨论8.1的PE,以传统方式弄的,以system登录的。除上面切换到administrator有问题和任务栏不大好使外,其他一切正常。 有些可能与PECMD有关,就是kill explorer后不能自动恢复。 8.  详情 回复 发表于 2015-4-12 15:11
回复

使用道具 举报

9248#
发表于 2015-4-12 15:11:53 | 只看该作者
mdyblog 发表于 2015-4-12 15:02
Win8PE中无问题,但在Win8.1PE
---------
8PE 是PE。 “登陆”是PECMD支撑的。

我这里没有讨论8.1的ramos,只讨论8.1的PE,以传统方式弄的,以system登录的。除上面切换到administrator有问题和任务栏不大好使外,其他一切正常。

有些可能与PECMD有关,就是kill explorer后不能自动恢复。
8.1PE我的那个发布页有下载地址。
回复

使用道具 举报

9249#
 楼主| 发表于 2015-4-12 15:47:41 | 只看该作者
ling3882688 发表于 2015-4-12 15:00
嗯,需要怎么改一下呢使得GPT分区的话分区数量显示也准确呢?我是想获取分区数量,当然针对MBR的话获取 ...

LIST  磁盘的时候,有个字段 GPT、MBR
分开来计算就是了。
回复

使用道具 举报

9250#
发表于 2015-4-13 09:08:45 | 只看该作者
本帖最后由 feiyike 于 2015-4-13 09:10 编辑
mdyblog 发表于 2015-4-12 09:37
1:
这个只是抛砖引玉。
稍改改, 你说的都能达到。


多谢,弄懂了一点
再麻烦下,怎么弹出提示,比如“未找到指定类型分区.....”
另外这行不懂  ENVI^ FORCELOCAL=1


//加载ESP分区
_SUB ShowType
//先判断GPT磁盘,再判断分区
         ENVI^ FORCELOCAL=1
         ENVI &&mtp=%~1
         PART list disk,hd
         FORX * %hd%,&&hd1,     
              {TEAM  PART -phy# list disk %hd1%,&&v1| MSTR &&hd2,&&Drv=<1><10>%v1%
               FIND $GPT<>%Drv%, EXIT -
               PART list part %hd2%,&&pts
               FORX * %pts%,&&pt,
                    {TEAM  PART -phy# list part %hd2%:%pt%,&&v2| MSTR &&ltp,&&Drv1=<2><9>%v2%
                     FIND $%Drv1%<> , EXIT -
                     FIND $%mtp%<>%ltp%, EXIT -
                     ENVI &&T=%hd2%:%pt%
                     TEAM FDRV *idlec &&Drvs=*:| MSTR &&Drv2=<1>%Drvs%
                     SHOW %T%,%Drv2%   
                     }
                  }
              
_END
  
LOGS * X.LOG
ShowType C12A7328-F81F-11D2-BA4B-00A0C93EC93B

点评

ENVI^ FORCELOCAL=1 ----------- 后面用 SET & 或 ENVI &&定义的变量都是局部变量。 不用担心 和函数外的同名函数冲突。 退出其定义范围,变量自动释放。  详情 回复 发表于 2015-4-13 09:40
回复

使用道具 举报

9251#
 楼主| 发表于 2015-4-13 09:40:00 | 只看该作者
feiyike 发表于 2015-4-13 09:08
多谢,弄懂了一点
再麻烦下,怎么弹出提示,比如“未找到指定类型分区.....”
另外这行不懂  ENVI^ F ...

ENVI^ FORCELOCAL=1
-----------
后面用 SET & 或 ENVI   &&定义的变量都是局部变量。
不用担心 和函数外的同名函数冲突。
退出其定义范围,变量自动释放。
回复

使用道具 举报

9252#
发表于 2015-4-13 11:06:06 | 只看该作者
M大,新版本的消息窗口怎么这样了呢?右侧空出好大一块。

点评

旧板是逐行计算大小。 问题是,最超大 (50万字符)对话框,太费时。 后来改成 然系统自动整体 计算大小。 可能是 两种方式 对字体处理不同。 再看看怎么改。  详情 回复 发表于 2015-4-13 11:26
回复

使用道具 举报

9253#
 楼主| 发表于 2015-4-13 11:26:18 | 只看该作者
ling3882688 发表于 2015-4-13 11:06
M大,新版本的消息窗口怎么这样了呢?右侧空出好大一块。

旧板是逐行计算大小。
问题是,最超大 (50万字符)对话框,太费时。
后来改成 然系统自动整体 计算大小。
可能是 两种方式 对字体处理不同。
再看看怎么改。

点评

M大,我用part -super -up -gpt 0#+1 10G 30G,为什么每次会把其它分区给删了?我只是想在两头两个分区之间的空白区域新建一个分区。  详情 回复 发表于 2015-4-13 16:52
回复

使用道具 举报

9254#
发表于 2015-4-13 20:23:45 | 只看该作者
M大,
PART list disk,name  
MESS  disk[%name%]

如果不需要弹出窗口,直接输出到文本,怎么处理呀?
另外,系统剪贴板内容输出到文本,用PECMD能处理吗,我现在用VBS

点评

PART list disk ,name //MESS disk[%name%] TEAM ENVI^ Clipboard=%name%|ENVI^ Clipboard?=CP WRIT %CurDir%\剪贴板内容.txt,$1,%name%  详情 回复 发表于 2015-4-14 10:10
回复

使用道具 举报

9255#
发表于 2015-4-14 10:10:01 | 只看该作者
本帖最后由 ling3882688 于 2015-4-14 11:05 编辑
feiyike 发表于 2015-4-13 20:23
M大,
PART list disk,name  
MESS  disk[%name%]

PART list disk 0 ,name
//MESS  disk[%name%]
TEAM ENVI^ Clipboard=%name%|ENVI^ Clipboard?=CP
WRIT %CurDir%\剪贴板内容.txt,$1,%CP%
//WRIT %CurDir%\剪贴板内容.txt,$1,%name%

授人以鱼不如授人以渔,如果你需要什么功能可以直接打开PECMD输入,例如:剪贴板,然后点右下角的搜索就可以了。

回复

使用道具 举报

9256#
发表于 2015-4-15 11:45:16 | 只看该作者
M大,如何用PECMD命令模仿ULTRAISO 在U盘末端做一个指定大小(比如1500MB)的隐藏区?

点评

这个要重新写分区表吧?先要减少现有的分区,再在第4个分表写上1500M的分区,就是隐藏的。 PART命令就可以。  详情 回复 发表于 2015-4-15 13:21
这个MBROSTool就可以。  详情 回复 发表于 2015-4-15 12:27
回复

使用道具 举报

9257#
发表于 2015-4-15 12:27:49 | 只看该作者
chiannet 发表于 2015-4-15 11:45
M大,如何用PECMD命令模仿ULTRAISO 在U盘末端做一个指定大小(比如1500MB)的隐藏区?

这个MBROSTool就可以。
回复

使用道具 举报

9258#
发表于 2015-4-15 13:21:32 | 只看该作者
chiannet 发表于 2015-4-15 11:45
M大,如何用PECMD命令模仿ULTRAISO 在U盘末端做一个指定大小(比如1500MB)的隐藏区?

这个要重新写分区表吧?先要减少现有的分区,再在第4个分表写上1500M的分区,就是隐藏的。
PART命令就可以。
回复

使用道具 举报

9259#
发表于 2015-4-15 15:45:59 | 只看该作者
最近想到利用ENVI^ alias命令和内嵌脚本,提供扩展的命令。这个方法有意思吗?
增强版PECMD.7z (538.16 KB, 下载次数: 17)
附件这个封装了一下MOUN命令,简化了UDm, UD, U+隐藏区的挂载,MOUN命令参数太多,用起来比较复杂。
以下是几个例子,可以用简单的命令来挂载。
   mount.udm USB0#1 Z:
   mount.ud 4#WIN8X64PE.ISO * ro
   mount.u+ USB0

点评

有意思。  详情 回复 发表于 2015-4-15 16:02
回复

使用道具 举报

9260#
 楼主| 发表于 2015-4-15 16:02:05 | 只看该作者
sp_star 发表于 2015-4-15 15:45
最近想到利用ENVI^ alias命令和内嵌脚本,提供扩展的命令。这个方法有意思吗?

附件这个封装了一下MOUN ...

有意思。
回复

使用道具 举报

9261#
发表于 2015-4-16 10:17:28 | 只看该作者
本帖最后由 ling3882688 于 2015-4-16 10:29 编辑

_SUB GetVol
    TEAM SET &v=| SET &b=0| SET &VL=%~3| SET &dsk=%~4| SET &pt=%~5| SET &r1=| SET &r2=
    FIND $%&VL%=,!  FDRV *vol &r1,&r2=%&VL%
    FIND $%&VL%=,
    { LOCK #pecmd_disk
        ENVI &b=1
        FDRV *idle *rsort &&VL=*:
        LSTR &VL=2,%&VL%
        SHOW & %&dsk%#%&pt%,%&VL%
        FDRV *vol &r1,&r2=%&VL%
        SHOW & ,%&VL%
    }
    ENVI-ret %1=%&r1%
    ENVI-ret %2=%&r2%
_END

GetVol  &&VOL  &&FS ""  0 3
MESS 【%&VOL%】【%FS%】

M大,这是之前你给我的一个获取卷标和文件系统的例子,如果碰到扩展分区,就无法正确获取卷标了。
还有,用part命令新建的分区,例如本来有3个分区,新建一个分区不打乱原来的编号,正常应该是0#4.

点评

1:扩展分区本来就没有 卷标 2:创建的时候,指定具体的分区号就可以了,如 0#4  详情 回复 发表于 2015-4-16 14:53
回复

使用道具 举报

9262#
 楼主| 发表于 2015-4-16 14:53:54 | 只看该作者
ling3882688 发表于 2015-4-16 10:17
_SUB GetVol
    TEAM SET &v=| SET &b=0| SET &VL=%~3| SET &dsk=%~4| SET &pt=%~5| SET &r1=| SET &r2= ...

1:扩展分区本来就没有  卷标

2:创建的时候,指定具体的分区号就可以了,如 0#4

点评

奥,说错了,不是扩展分区,是逻辑分区。  详情 回复 发表于 2015-4-16 17:36
回复

使用道具 举报

9263#
发表于 2015-4-16 17:36:14 | 只看该作者
mdyblog 发表于 2015-4-16 14:53
1:扩展分区本来就没有  卷标

2:创建的时候,指定具体的分区号就可以了,如 0#4

奥,说错了,不是扩展分区,是逻辑分区。

点评

参数错了吧,多试几个:5~9 测试正常: [attachimg]215004[/attachimg]  详情 回复 发表于 2015-4-16 18:42
回复

使用道具 举报

9264#
 楼主| 发表于 2015-4-16 18:42:23 | 只看该作者
ling3882688 发表于 2015-4-16 17:36
奥,说错了,不是扩展分区,是逻辑分区。

参数错了吧,多试几个:5~9
测试正常:

点评

嗯,确实是物理编号写错了,有逻辑分区的话应该+1的。改成直接获取正确的物理编号就没问题了。  详情 回复 发表于 2015-4-17 14:54
回复

使用道具 举报

9265#
发表于 2015-4-17 14:54:35 | 只看该作者
本帖最后由 ling3882688 于 2015-4-17 15:01 编辑
mdyblog 发表于 2015-4-16 18:42
参数错了吧,多试几个:5~9
测试正常:


嗯,确实是物理编号错了(以前想当然以为物理编号就是第几块分区,实际上有扩展分区的时候就不一定了。),有逻辑分区的话应该+1的。改成直接获取正确的物理编号<8>然后再获取卷标就没问题了。
谢谢M大!
回复

使用道具 举报

9266#
发表于 2015-4-19 10:45:48 | 只看该作者
谢谢分享,恭祝新年大吉大利!
回复

使用道具 举报

9267#
发表于 2015-4-20 12:08:03 | 只看该作者
本帖最后由 ling3882688 于 2015-4-20 12:34 编辑

M大,我想检测一个硬盘有没有活动分区,我会单个判断每个分区是不是活动的,但是如果分区数量不确定怎么判断?
老是不会处理这样的情况,比如假设我知道有几个主分区。那我可以分别检测每个分区是不是活动,但是分区数是个变量,不确定的。

想学你之前给我的代码来写,但是不知道怎么写,思路倒是有,一种方法就是遍历每个分区,每次用磁盘分区数-1,直到分区数-1=0。
另一种就是判断Part -gui里那个活动那一列里是不是有1.M大有没有更好的办法?

点评

如果分区数量不确定怎么判断? ----- 可以直接列出分分区列表 PART list part 0,parts mess. %parts%  详情 回复 发表于 2015-4-20 16:44
回复

使用道具 举报

9268#
 楼主| 发表于 2015-4-20 16:44:55 | 只看该作者
ling3882688 发表于 2015-4-20 12:08
M大,我想检测一个硬盘有没有活动分区,我会单个判断每个分区是不是活动的,但是如果分区数量不确定怎么判 ...

如果分区数量不确定怎么判断?
-----
可以直接列出分分区列表
PART  list  part   0,parts
mess. %parts%

点评

这些命令我倒是都知道,可能我没表述明白。 比如我自己知道有4个分区,那 1234分别检测每个分区是否是活动的就可以了,但是写出来代码的话这个分区数是个变量。数值打比方说是100呢? 笨笨的办法是下面这样:  详情 回复 发表于 2015-4-20 17:20
回复

使用道具 举报

9269#
发表于 2015-4-20 17:20:51 | 只看该作者
本帖最后由 ling3882688 于 2015-4-20 17:44 编辑
mdyblog 发表于 2015-4-20 16:44
如果分区数量不确定怎么判断?
-----
可以直接列出分分区列表

这些命令我倒是都知道,可能我没表述明白。

比如我自己知道有4个分区,那 1234分别检测每个分区是否是活动的就可以了,但是写出来代码的话这个分区数是个变量。数值打比方说是100呢?

IFEX $%分区数%=2, CALL P2
IFEX $%分区数%=3, CALL P3
_SUB P2
PART -hextp -phy# -fill list part 0#1 ,&&PD1|MSTR P1T3=<3>%&PD1%
PART -hextp -phy# -fill list part 0#2 ,&&PD2|MSTR P2T3=<3>%&PD2%
IFEX $[ $%P1T3%=1 | $%P2T3%=1 ],MESS 存在活动分区!
_END

_SUB P3
PART -hextp -phy# -fill list part 0#1 ,&&PD1|MSTR P1T3=<3>%&PD1%
PART -hextp -phy# -fill list part 0#2 ,&&PD2|MSTR P2T3=<3>%&PD2%
PART -hextp -phy# -fill list part 0#2 ,&&PD2|MSTR P2T3=<3>%&PD2%
IFEX $[ $%P1T3%=1 | $%P2T3%=1 | $%P3T3%=1],MESS 存在活动分区!
_END


最笨的办法是上面这样,我想用个代码段来写,但是不会写(代码段帮助没看懂),想跟M大学习下简单的代码段怎么写,我参照了一些代码段的例子,思路大概是这样:

获取 %分区数%这个变量,然后

{
检测0#%分区数%是否是活动的!活动则提示!
SET 分区数=%分区数%-1
直到 %分区数%=0
}

能不能给个简单的代码段的例子?

点评

FORX * %parts%,pt, { ...... }  详情 回复 发表于 2015-4-20 17:47
回复

使用道具 举报

9270#
 楼主| 发表于 2015-4-20 17:47:01 | 只看该作者
ling3882688 发表于 2015-4-20 17:20
这些命令我倒是都知道,可能我没表述明白。

比如我自己知道有4个分区,那 1234分别检测每个分区是否是 ...

FORX * %parts%,pt,
{
......
}

点评

照葫芦画个瓢: //获取活动分区物理编号 _SUB GetAPart ENVI^ FORCELOCAL=1 SET &hd=%~1 CALC #hd=%hd% PART list part %hd%,&&pts SET &Active=0 FORX * %  详情 回复 发表于 2015-4-21 03:36
好像有点明白了,我自己DIY了一下,就是这个效果。谢谢M大。 _SUB ListPPt ENVI^ FORCELOCAL=1 SET &hd=%~1 CALC #hd=%hd% PART list part %hd%,&&pts SET &nall=0  详情 回复 发表于 2015-4-20 17:55
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-27 05:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表