无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5358|回复: 37
打印 上一主题 下一主题

[已解决] 请教PECMD条件判断语句写法

[复制链接]
跳转到指定楼层
1#
发表于 2022-4-18 18:18:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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并选择后者呢?

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




2#
发表于 2022-4-18 21:31:28 | 只看该作者
本帖最后由 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%
}
}




随便套几下

点评

指定目录层级为5后,快了很多,这个问题应该没有了;只剩下级目录判断部分; 还有,这种写法,如果再加几个浏览器,是否就没法再写了(语句里有一个!号了);  发表于 2022-4-18 23:02
整体慢的原因是不是未指定目录层级?我指定了6,等下我再试试看;  发表于 2022-4-18 22:54
测试了下,有两个问题: 1、Edge 部分好像并未判断准确,取的还是前一个,未取下级目录里的; 2、整体执行变的很慢,好像是全部循环完毕后出的结果,是否依据条件判断逐步执行呢? 三个结果确实执行了判断,能  详情 回复 发表于 2022-4-18 22:37
好的,谢谢指点,稍等我测试一下!  发表于 2022-4-18 22:11
回复

使用道具 举报

3#
发表于 2022-4-18 21:34:40 | 只看该作者
没测试,可能有地方写错了
回复

使用道具 举报

4#
 楼主| 发表于 2022-4-18 22:11:00 | 只看该作者
我刚自己试着写了一个,但判断好像不准确:
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
        }
    }
}

点评

IFEX $%Myedge%>0 这个判断语句不起作用,写为 =空 也一样;  发表于 2022-4-18 23:19
回复

使用道具 举报

5#
 楼主| 发表于 2022-4-18 22:37:57 | 只看该作者
826773297 发表于 2022-4-18 21:31
FORX /S \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
FIND $%My360%=,
{

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

三个结果确实执行了判断,能依次选择;

点评

没取下级目录是因为进行了特定文件夹判断,如果下级目录是带.的版本号目录则建立该快捷方式,否则不建立 速度慢是因为搜索了所有目录  详情 回复 发表于 2022-4-19 08:08
回复

使用道具 举报

6#
发表于 2022-4-19 00:18:32 来自手机 | 只看该作者
以文件名盲收6级目录,收到就停止后面的命令 肯定不准

点评

列了几个大致可能用到的浏览器: 360chrome.exe 360浏览器 Chrome.exe 谷歌 msedge.exe Edge firefox.exe 火狐 QQBrowser.exe QQ浏览器 chrome.exe  详情 回复 发表于 2022-4-19 09:05
回复

使用道具 举报

7#
发表于 2022-4-19 00:20:22 来自手机 | 只看该作者
明天给你写一个 现在是手

点评

好的谢谢!辛苦了!  发表于 2022-4-19 00:51
回复

使用道具 举报

8#
发表于 2022-4-19 00:20:59 来自手机 | 只看该作者
回复

使用道具 举报

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

没取下级目录是因为进行了特定文件夹判断,如果下级目录是带.的版本号目录则建立该快捷方式,否则不建立
速度慢是因为搜索了所有目录
回复

使用道具 举报

10#
发表于 2022-4-19 08:13:39 | 只看该作者
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%
}
}

点评

我感觉要不先简化,不考虑下级目录问题,看能否代码简单化,方便增减浏览器(我列了7个)。  发表于 2022-4-19 13:18
测试了,Myedge部分还是未取下级目录,其它都正常。  发表于 2022-4-19 13:15
测试了,Myedge部分还是未取下级目录,其它都正常。  详情 回复 发表于 2022-4-19 13:15
回复

使用道具 举报

11#
发表于 2022-4-19 08:14:21 | 只看该作者
目录层数自己修改
回复

使用道具 举报

12#
 楼主| 发表于 2022-4-19 09:05:27 | 只看该作者
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 百分百浏览器)重名;



点评

这么多浏览器 而且每一个都有很多版 对每一个浏览器的结构也不是很了解 问题不是代码怎么写 而是找不到有效的思路  详情 回复 发表于 2022-4-19 13:05
回复

使用道具 举报

13#
发表于 2022-4-19 13:05:39 | 只看该作者
lhc0688 发表于 2022-4-19 09:05
列了几个大致可能用到的浏览器:

360chrome.exe       360浏览器

这么多浏览器 而且每一个都有很多版 对每一个浏览器的结构也不是很了解
问题不是代码怎么写 而是找不到有效的思路

点评

确实如您所言,这种查找方式很不严谨,而且效率也明显低下;不过暂时还想不出更好的方式,而且我想这个仅是一个补充功能,网络版的PE,在不内置浏览器、QQ情况下,如果硬盘上有,就列出供选用,真列的不准也无所谓,  详情 回复 发表于 2022-4-19 13:24
去查原系统的注册表是不是更好一些?  详情 回复 发表于 2022-4-19 13:18
回复

使用道具 举报

14#
 楼主| 发表于 2022-4-19 13:15:21 | 只看该作者
826773297 发表于 2022-4-19 08:13
FORX /S \360chrome.exe,My360,1,LINK %Desktop%\360浏览器,%My360%
FIND $%My360%=,
{

测试了,Myedge部分还是未取下级目录,其它都正常。

点评

没有取子目录应该是你电脑有多个同名exe,刚好找到的这个exe没有子目录存在同名文件,你自己查一下,不再发代码了  详情 回复 发表于 2022-4-19 16:43
回复

使用道具 举报

15#
发表于 2022-4-19 13:18:56 | 只看该作者
2012胡言乱语 发表于 2022-4-19 13:05
这么多浏览器 而且每一个都有很多版 对每一个浏览器的结构也不是很了解
问题不是代码怎么写 而是找不到 ...

去查原系统的注册表是不是更好一些?

点评

确实是个思路,但很多系统会存在卸载不干净情况。  发表于 2022-4-19 16:33
收到!谢谢指点!不过这种子过程方式我得先体会一下看怎么样,代码小白有点勉为其难。  发表于 2022-4-19 16:32
回复

使用道具 举报

16#
 楼主| 发表于 2022-4-19 13:24:20 | 只看该作者
2012胡言乱语 发表于 2022-4-19 13:05
这么多浏览器 而且每一个都有很多版 对每一个浏览器的结构也不是很了解
问题不是代码怎么写 而是找不到 ...

确实如您所言,这种查找方式很不严谨,而且效率也明显低下;不过暂时还想不出更好的方式,而且我想这个仅是一个补充功能,网络版的PE,在不内置浏览器、QQ情况下,如果硬盘上有,就列出供选用,真列的不准也无所谓,而且是在PE桌面已经生成后再列,不占用PE时间;
回复

使用道具 举报

17#
 楼主| 发表于 2022-4-19 13:32:29 | 只看该作者
还有个思路,能否把 【搜索、创建桌面图标】部分写成单独的子程序,应用exe文件名、快捷图标名用变量,这样IFEX语句是否能更简单、方便扩充?
回复

使用道具 举报

18#
发表于 2022-4-19 13:47:01 | 只看该作者
本帖最后由 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

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







点评

收到!谢谢指点!不过这种子过程方式我得先体会一下看怎么样,代码小白有点勉为其难。  详情 回复 发表于 2022-4-19 16:33
回复

使用道具 举报

19#
发表于 2022-4-19 15:33:46 | 只看该作者
学习了,努力中
回复

使用道具 举报

20#
 楼主| 发表于 2022-4-19 16:33:09 | 只看该作者
2012胡言乱语 发表于 2022-4-19 13:47
CALL A
_SUB A
      TEAM ENVI &&My360=|ENVI &&QUD=0

收到!谢谢指点!不过这种子过程方式我得先体会一下看怎么样,代码小白有点勉为其难。
回复

使用道具 举报

21#
发表于 2022-4-19 16:43:27 来自手机 | 只看该作者
lhc0688 发表于 2022-4-19 13:15
测试了,Myedge部分还是未取下级目录,其它都正常。

没有取子目录应该是你电脑有多个同名exe,刚好找到的这个exe没有子目录存在同名文件,你自己查一下,不再发代码了

点评

哦豁,帮主。。。哦豁。。。  详情 回复 发表于 2022-4-20 16:40
收了下,确实有多个,但都存在下级版本号子目录同名exe,好的,我仔细研究下,已经大概差不多能实现了,先谢过兄弟!  发表于 2022-4-19 16:57
回复

使用道具 举报

22#
发表于 2022-4-20 06:53:24 来自手机 | 只看该作者
我只想知道,你的98EDGE浏览器,是怎么在SYSTEM账户下,运行的。。。你们跑题了。。。

点评

最后解决结果: 仔细测试后,发现Edge不能运行是因为PE自身原因,不是下级目录重名exe问题  详情 回复 发表于 2022-4-20 13:14
回复

使用道具 举报

23#
发表于 2022-4-20 08:12:25 | 只看该作者
梦老师来了

点评

客气客气。。。  详情 回复 发表于 2022-4-20 16:39
回复

使用道具 举报

24#
 楼主| 发表于 2022-4-20 13:14:43 | 只看该作者
狼人72105 发表于 2022-4-20 06:53
我只想知道,你的98EDGE浏览器,是怎么在SYSTEM账户下,运行的。。。你们跑题了。。。

最后解决结果:

仔细测试后,发现Edge不能运行是因为PE自身原因,不是下级目录重名exe问题
回复

使用道具 举报

25#
发表于 2022-4-20 16:38:49 来自手机 | 只看该作者
据说,新版的edge,可以在A账户下,运行。。。不知道能不能破解在S账户下运行。
回复

使用道具 举报

26#
发表于 2022-4-20 16:39:53 来自手机 | 只看该作者
ttt0001 发表于 2022-4-20 08:12
梦老师来了

客气客气。。。
回复

使用道具 举报

27#
发表于 2022-4-20 16:40:43 来自手机 | 只看该作者
826773297 发表于 2022-4-19 16:43
没有取子目录应该是你电脑有多个同名exe,刚好找到的这个exe没有子目录存在同名文件,你自己查一下,不再 ...

哦豁,帮主。。。哦豁。。。
回复

使用道具 举报

28#
发表于 2022-4-27 02:42:25 | 只看该作者
请教:为什么forx /s:3 !\…
在我的测试中,/s和!\ 双参数,为什么不能成功?
就是″目录层数″加“倒序查文件”同时用,我在测试中发现程序没反应,
你们也这样吗?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 05:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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