无忧启动论坛

标题: 请教PECMD条件判断语句写法 [打印本页]

作者: lhc0688    时间: 2022-4-18 18:18
标题: 请教PECMD条件判断语句写法
本帖最后由 lhc0688 于 2022-5-9 00:27 编辑

最后解决结果:

仔细测试后,发现Edge不能运行是因为PE自身原因,不是下级目录重名exe问题,这样的话,语句就可以简化很多了;
参考8267732972012胡言乱语两位朋友的代码,稍作修改写为:

FORX /S:6 \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
IFEX %desktop%\360浏览器.lnk,!
{
        FORX /S:6 \chrome.exe,MyGoogle,1,LINK %Desktop%\Google浏览器,%MyGoogle%
        IFEX %desktop%\Google浏览器.lnk,!
        {
                FORX /S:6 \firefox.exe,Myff,1,LINK %Desktop%\火狐浏览器,%Myff%
                IFEX %desktop%\火狐浏览器.lnk,!
                {
                        FORX /S:6 \QQBrowser.exe,MyQQ,1,LINK %Desktop%\QQ浏览器,%MyQQ%
                        IFEX %desktop%\QQ浏览器.lnk,!
                        {
                                FORX /S:6 \chrome.VisualElementsManifest.xml,Mycent,1,
                                {
                                FDIR fPath=%Mycent%
                                LINK %Desktop%\百分百浏览器,%fPath%\chrome.exe
                                }
                                IFEX %desktop%\百分百浏览器.lnk,!
                                {
                                        FORX /S:6 \twinkstar.exe,Mystar,1,LINK %Desktop%\星愿浏览器,%Mystar%
                                        IFEX %desktop%\星愿浏览器.lnk,!
                                        {
                                                FORX /S:6 \msedge.exe,Myedge,1,LINK %Desktop%\Edge浏览器,%Myedge%
                                        }
                                }
                        }
                }
        }
}


实测正常能执行;

问题暂时算解决,感谢8267732972012胡言乱语 两位坛友!如果高手有更好的写法,欢迎指导。

已知存在的问题:
1、运行速度非常慢;
2、Google浏览器和百分百浏览器执行程序重名,如果百分百在前,则会导致结果出错(快捷图标名字错,但仍可运行);

----------------------------------------------------------------------------------
原求助问题:

PETools.ini 中有这样的命令,目的是想按顺序查找到实机系统里已有的浏览器,并把找到的第一个建立桌面快捷方式:

FORX /S:6 \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
FORX /S:6 \msedge.exe,Myedge,1,LINK %Desktop%\Edge浏览器,%Myedge%
FORX /S:6 \chrome.exe,MyGoogle,1,LINK %Desktop%\Google浏览器,%MyGoogle%

现在想写成条件判断语句,如果找到上一个,就不再继续找下面的,查看PECMD帮助里面IFEX语法太复杂实在看不懂,故请教下坛里高手,这个判断语句应该怎样写?还请代码大佬能不吝赐教,先谢!

另外,上面 FORX 查找结果还遇到个小问题,就是找到的执行程序并非浏览器自带的,而是绿化版新增加的,这会导致创建快捷图标后不能正常运行,比如:Edge浏览器,目录结构如下:

Edge\msedge.exe                          (这个是绿化版另加的)
Edge\98.0.1108.62\msedge.exe      (这个是原程序的)

找到第一个后,建立桌面快捷方式,不能正常运行,有没可能再判断下级目录是否有同名exe并选择后者呢?

以上问题一并请赐教,谢谢!





作者: 826773297    时间: 2022-4-18 21:31
本帖最后由 826773297 于 2022-4-18 21:45 编辑

FORX /S \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
FIND $%My360%=,
{
FORX /S \msedge.exe,Myedge,1,
{
FDIR fPath=%Myedge%
FORX /S %fPath%\msedge.exe,Myedgee,1,
{
FDIR fPathh=%Myedgee%
LPOS iPos=.,1,%fPathh%
FIND |%iPos%>0,
{
LINK %Desktop%\Edge浏览器,%Myedgee%
}!
{
LINK %Desktop%\Edge浏览器,%Myedge%
}
}
}
IFEX %desktop%\Edge浏览器.lnk,!
{
FORX /S \chrome.exe,MyGoogle,1,LINK %Desktop%\Google浏览器,%MyGoogle%
}
}




随便套几下
作者: 826773297    时间: 2022-4-18 21:34
没测试,可能有地方写错了
作者: lhc0688    时间: 2022-4-18 22:11
我刚自己试着写了一个,但判断好像不准确:
FORX /S:6 \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
IFEX $%My360%>0,
{*
    FORX /S:6 \msedge.exe,Myedge,1,LINK %Desktop%\Edge浏览器,%Myedge%
    IFEX $%Myedge%>0,
    {*
        FORX /S:6 \chrome.exe,MyGoogle,1,LINK %Desktop%\Google浏览器,%MyGoogle%
        IFEX $%MyGoogle%>0,
        {*
        EXIT FORX
        }
    }
}
作者: lhc0688    时间: 2022-4-18 22:37
826773297 发表于 2022-4-18 21:31
FORX /S \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
FIND $%My360%=,
{

测试了下,有两个问题:
1、Edge 部分好像并未判断准确,取的还是前一个,未取下级目录里的;
2、整体执行变的很慢,好像是全部循环完毕后出的结果,是否依据条件判断逐步执行呢?

三个结果确实执行了判断,能依次选择;
作者: 2012胡言乱语    时间: 2022-4-19 00:18
以文件名盲收6级目录,收到就停止后面的命令 肯定不准
作者: 2012胡言乱语    时间: 2022-4-19 00:20
明天给你写一个 现在是手
作者: 2012胡言乱语    时间: 2022-4-19 00:20

作者: 826773297    时间: 2022-4-19 08:08
lhc0688 发表于 2022-4-18 22:37
测试了下,有两个问题:
1、Edge 部分好像并未判断准确,取的还是前一个,未取下级目录里的;
2、整体 ...

没取下级目录是因为进行了特定文件夹判断,如果下级目录是带.的版本号目录则建立该快捷方式,否则不建立
速度慢是因为搜索了所有目录
作者: 826773297    时间: 2022-4-19 08:13
FORX /S \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
FIND $%My360%=,
{
FORX /S \msedge.exe,Myedge,1,
{
FDIR fPath=%Myedge%
FORX /S %fPath%\msedge.exe,Myedgee,1,
{
LINK %Desktop%\Edge浏览器,%Myedgee%
}
IFEX %desktop%\Edge浏览器.lnk,!
{
LINK %Desktop%\Edge浏览器,%Myedge%
}
}
IFEX %desktop%\Edge浏览器.lnk,!
{
FORX /S \chrome.exe,MyGoogle,1,LINK %Desktop%\Google浏览器,%MyGoogle%
}
}
作者: 826773297    时间: 2022-4-19 08:14
目录层数自己修改
作者: lhc0688    时间: 2022-4-19 09:05
2012胡言乱语 发表于 2022-4-19 00:18
以文件名盲收6级目录,收到就停止后面的命令 肯定不准

列了几个大致可能用到的浏览器:

360chrome.exe       360浏览器
Chrome.exe             谷歌
msedge.exe             Edge
firefox.exe                火狐

QQBrowser.exe       QQ浏览器
chrome.exe             百分百浏览器
twinkstar.exe           星愿浏览器  


看来确实存在按文件名不准问题,(Chrome.exe谷歌、chrome.exe 百分百浏览器)重名;




作者: 2012胡言乱语    时间: 2022-4-19 13:05
lhc0688 发表于 2022-4-19 09:05
列了几个大致可能用到的浏览器:

360chrome.exe       360浏览器

这么多浏览器 而且每一个都有很多版 对每一个浏览器的结构也不是很了解
问题不是代码怎么写 而是找不到有效的思路
作者: lhc0688    时间: 2022-4-19 13:15
826773297 发表于 2022-4-19 08:13
FORX /S \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
FIND $%My360%=,
{

测试了,Myedge部分还是未取下级目录,其它都正常。
作者: 2010techon    时间: 2022-4-19 13:18
2012胡言乱语 发表于 2022-4-19 13:05
这么多浏览器 而且每一个都有很多版 对每一个浏览器的结构也不是很了解
问题不是代码怎么写 而是找不到 ...

去查原系统的注册表是不是更好一些?
作者: lhc0688    时间: 2022-4-19 13:24
2012胡言乱语 发表于 2022-4-19 13:05
这么多浏览器 而且每一个都有很多版 对每一个浏览器的结构也不是很了解
问题不是代码怎么写 而是找不到 ...

确实如您所言,这种查找方式很不严谨,而且效率也明显低下;不过暂时还想不出更好的方式,而且我想这个仅是一个补充功能,网络版的PE,在不内置浏览器、QQ情况下,如果硬盘上有,就列出供选用,真列的不准也无所谓,而且是在PE桌面已经生成后再列,不占用PE时间;
作者: lhc0688    时间: 2022-4-19 13:32
还有个思路,能否把 【搜索、创建桌面图标】部分写成单独的子程序,应用exe文件名、快捷图标名用变量,这样IFEX语句是否能更简单、方便扩充?
作者: 2012胡言乱语    时间: 2022-4-19 13:47
本帖最后由 2012胡言乱语 于 2022-4-19 13:50 编辑

CALL A
_SUB A
      TEAM ENVI &&My360=|ENVI &&QUD=0
      FORX /S:6 \360chrome.exe,&My360,1,TEAM LINK %Desktop%\360浏览器,%&My360%|ENVI &QUD=1
      IFEX $%&QUD%=1,EXIT _SUB
      后面以此类推
_END

IFEX $%&QUD%=1 确定是1 就退出当前_SUB A

至于里面搜索到的准不准确 很难判断








作者: jonyzhr    时间: 2022-4-19 15:33
学习了,努力中
作者: lhc0688    时间: 2022-4-19 16:33
2012胡言乱语 发表于 2022-4-19 13:47
CALL A
_SUB A
      TEAM ENVI &&My360=|ENVI &&QUD=0

收到!谢谢指点!不过这种子过程方式我得先体会一下看怎么样,代码小白有点勉为其难。
作者: 826773297    时间: 2022-4-19 16:43
lhc0688 发表于 2022-4-19 13:15
测试了,Myedge部分还是未取下级目录,其它都正常。

没有取子目录应该是你电脑有多个同名exe,刚好找到的这个exe没有子目录存在同名文件,你自己查一下,不再发代码了
作者: 狼人72105    时间: 2022-4-20 06:53
我只想知道,你的98EDGE浏览器,是怎么在SYSTEM账户下,运行的。。。你们跑题了。。。
作者: ttt0001    时间: 2022-4-20 08:12
梦老师来了
作者: lhc0688    时间: 2022-4-20 13:14
狼人72105 发表于 2022-4-20 06:53
我只想知道,你的98EDGE浏览器,是怎么在SYSTEM账户下,运行的。。。你们跑题了。。。

最后解决结果:

仔细测试后,发现Edge不能运行是因为PE自身原因,不是下级目录重名exe问题
作者: 狼人72105    时间: 2022-4-20 16:38
据说,新版的edge,可以在A账户下,运行。。。不知道能不能破解在S账户下运行。
作者: 狼人72105    时间: 2022-4-20 16:39
ttt0001 发表于 2022-4-20 08:12
梦老师来了

客气客气。。。
作者: 狼人72105    时间: 2022-4-20 16:40
826773297 发表于 2022-4-19 16:43
没有取子目录应该是你电脑有多个同名exe,刚好找到的这个exe没有子目录存在同名文件,你自己查一下,不再 ...

哦豁,帮主。。。哦豁。。。
作者: me007003    时间: 2022-4-27 02:42
请教:为什么forx /s:3 !\…
在我的测试中,/s和!\ 双参数,为什么不能成功?
就是″目录层数″加“倒序查文件”同时用,我在测试中发现程序没反应,
你们也这样吗?




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3