找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: 766266yyn

[文件操作] 求助--WinPE运行 DrvIndex.exe -t 及 -h 进度条

[复制链接]
发表于 6 天前 | 显示全部楼层
766266yyn 发表于 2026-4-13 19:49
调用方法?

11楼老师的我 EXEC “X:\Program Files\DrvIndex\DrvIndex.cmd” -t -h,结果出现 DrvIndex. ...

我怀疑啊:EXEC “X:\Program Files\DrvIndex\DrvIndex.cmd” ,,,命令上启动的是DrvIndex.cmd,而主进程是CMD.EXE
而PECMD程序判断的,会不会是一直在找  DrvIndex.cmd 这样的进程呢?
不如改写一下调用方式: EXEC “%windir%\system32\cmd.exe" /c X:\Program Files\DrvIndex\DrvIndex.cmd -t -h   呢?
纯猜的啊!,,,
不负责验证调试包熟,,星爷话斋:猜噶又晤犯法!,,,,,
,,
,,,
,,,,
今天出去接水管,累死了,,,
 楼主| 发表于 6 天前 | 显示全部楼层
jiavip 发表于 2026-4-13 20:00
我怀疑啊:EXEC “X:\Program Files\DrvIndex\DrvIndex.cmd” ,,,命令上启动的是DrvIndex.cmd,而主进 ...

新思路,可以试一试
发表于 6 天前 | 显示全部楼层
766266yyn 发表于 2026-4-13 19:49
调用方法?

11楼老师的我 EXEC “X:\Program Files\DrvIndex\DrvIndex.cmd” -t -h,结果出现 DrvIndex. ...

代码里完善 DrvIndex.exe 的路径 ,比如 x:\y\z\DrvIndex.exe,先试试会不会”卡死“及是否可行。
 楼主| 发表于 6 天前 | 显示全部楼层
77七 发表于 2026-4-13 20:30
代码里完善 DrvIndex.exe 的路径 ,比如 x:\y\z\DrvIndex.exe,先试试会不会”卡死“及是否可行。 ...

谢谢老师!
代码完善 DrvIndex.exe 路径后 ini 配置文件中 EXEC “%ProgramFiles%\DrvIndex\DrvIndex.cmd" -t , 成功运行 DrvIndex.exe,过程中显示 cmd 黑窗口,结束后显示等待3秒退出。
可不可以隐藏 cmd 那个黑窗口,用界面或消息提示”正在安装本地驱动,请稍后 ... ...“,结束后自动刷新 explorer.exe?
发表于 6 天前 | 显示全部楼层
本帖最后由 77七 于 2026-4-13 22:05 编辑
766266yyn 发表于 2026-4-13 21:48
谢谢老师!
代码完善 DrvIndex.exe 路径后 ini 配置文件中 EXEC “%ProgramFiles%\DrvIndex\DrvIndex.cmd ...




[
  1. @echo off

  2. set "ARGS=%*"
  3. start /b "" "x:\y\z\:DrvIndex.exe" %ARGS%

  4. :loop
  5. timeout /t 3 /nobreak >nul
  6. tasklist | find /i "DrvIndex.exe" >nul
  7. if not errorlevel 1 (
  8.         goto :loop
  9. )
  10. echo=
  11. pause
复制代码


还有一点,还是提一下,不知道是否支持/wait,可以试一下,这样就不用循环检测进程了
  1. start /b /wait "" "x:\y\z\:DrvIndex.exe" %ARGS%
复制代码
 楼主| 发表于 6 天前 | 显示全部楼层
77七 发表于 2026-4-13 22:01
[

还有一点,还是提一下,不知道是否支持/wait,可以试一下,这样就不用循环检测进程了

pecmd 支持 -wait 或 "="
 楼主| 发表于 5 天前 | 显示全部楼层
77七 发表于 2026-4-13 22:01
[

还有一点,还是提一下,不知道是否支持/wait,可以试一下,这样就不用循环检测进程了

加 -wait,仍是黑框,也没有控制 DrvIndex.exe 进程结束再运行后面的命令。
发表于 5 天前 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-4-14 13:55 编辑
766266yyn 发表于 2026-4-13 19:29
pecmd.ini最后两行:目的是让 DrvIndex.exe 运行结束后刷新 explorer.exe,结果是 DrvIndex.exe 运行结束 ...


用 AI 得知 ... DrvIndex.exe 是由国内开发者 Lightning(无忧启动论坛)独立开发和维护的个人工具,据说作者在此论坛依然活跃,楼主可在此论坛获取其帮助,当然不是要他给一个进度条了,你要讲明 drvindex.exe 与后续程序的 '冲突' 就是了,也就是如何判断 drvindex.exe 正常结束的标识?是进程判断?还是文件判断?或其他什么?

如果 drvindex.exe 不能用检查进程判断其是否正常结束,以前那些用 tasklist ...|find... 方法操作的代码均会失效。
发表于 5 天前 | 显示全部楼层
本帖最后由 77七 于 2026-4-14 15:37 编辑

大概是被1楼的bat代码带偏了,我在pe下试了,DrvIndex.exe 是会阻塞进程的;pecmd.ini 中的命令启动了1楼的bat,然后直接执行下一条pecmd命令了,问题在这里,大概是这样的吧,我几乎没用过pecmd。

测试 pecmd exec =!x:\test.bat 可等待 test.bat中的DrvIndex -t命令执行完成再执行;

也可以 试试pecmd.ini    exec =!DrvIndex.exe -t,不用另外启动bat了。
发表于 5 天前 | 显示全部楼层
77七 发表于 2026-4-14 15:35
大概是被1楼的bat代码带偏了,我在pe下试了,DrvIndex.exe 是会阻塞进程的;pecmd.ini 中的命令启动了1楼的 ...

你忽略了一个词  “进度条”,,,,
发表于 5 天前 | 显示全部楼层
jiavip 发表于 2026-4-14 16:17
你忽略了一个词  “进度条”,,,,

我觉得华而不实,没什么意义,解决核心问题才是关键。
发表于 5 天前 | 显示全部楼层
77七 发表于 2026-4-14 16:24
我觉得华而不实,没什么意义,解决核心问题才是关键。

好直男的回复和对白啊,,
,,
,,,
,,,,
其实有进度条还是有点用的,,,
最少能观察到程序走到哪一步了,
能通过耗时判断出,一些简单的问题,,,
人观察电脑问题最直观的还是靠视觉,
不可能用意念和电脑的0&1机械码交流吧!

---说个小故事吧!
我玩PE 的时候,那时候做网吧行业,
电脑多,有些机子表面正常,
玩着玩着游戏就莫名的崩溃,
启动PE 就死活进不去。
特别是PE系统,对内存瑕疵特别敏感。,,,
后来换了条内存条就OK了,,,

对于个人电脑,不可能有那么多内存条给你去试错和排除,
所以我们要借助,程序运行时的反应和回馈,来判断电脑的故障点。
而判断故障,最直接的方式就是观察,,,
要不是脚本不支持的话,我估计还有很多人会把 CPU 内存 网络 磁盘 等损耗和信息写上去呢!

这就是有些人对写程序和脚本的理念和应用不同的视角。,,,,
发表于 5 天前 | 显示全部楼层
jiavip 发表于 2026-4-14 16:53
好直男的回复和对白啊,,
,,
,,,

问了下ai,关于1楼的c语言代码

问:代码中的进度条功能 可以表示真正进度吗?

答:

简单直接地回答你:不可以。

代码中的进度条只是一个**“视觉欺骗”动画**,它并不能反映 DrvIndex.exe 真实的内部工作进度。

为什么它不是真实的进度?
我们可以从 WaitProcess 函数的逻辑中看出来:

盲目等待:它只是在后台不断检查 DrvIndex.exe 的进程 ID (PID) 是否还在运行。

模拟数值:

C
if (pct < 95) pct++;
DrawProgress(pct);
Sleep(150);
这段代码的意思是:只要进程没结束,进度条每 150 毫秒就自增 1%,直到涨到 95% 为止。

突变完成:一旦它检测到进程消失了(运行结束),它会直接跳到 100%。

这意味着:

如果 DrvIndex.exe 实际上只用了 2 秒就跑完了,进度条可能才跳到 15% 就直接闪现到 100% 然后消失了。

如果 DrvIndex.exe 卡住了(比如在处理大量驱动),进度条会慢悠悠地涨到 95%,然后死死地卡在 95%,直到进程真正结束或被强制关闭。

如何才能实现“真实”进度?
要实现真实进度,通常需要以下两种方式之一:

1. 进程间通信 (IPC)
DrvIndex.exe 必须主动告诉你的启动器它完成了多少。

方法:DrvIndex.exe 向标准输出(stdout)打印进度百分比,启动器通过管道(Pipe)读取这些数字并绘制进度条。

2. 文件/状态监控
如果 DrvIndex.exe 会产生日志文件或解压特定数量的文件。

方法:启动器扫描目标目录的文件数量,并将其与预期的总数进行对比,从而计算百分比。

总结
你现在的代码只是一个**“心理安慰剂”**。它告诉用户“程序还在跑,没死机”,但它完全不知道 DrvIndex.exe 到底处理了 1 个驱动还是 100 个驱动。

建议: 如果你只是想让 PE 环境下的部署看起来不那么枯燥,这个代码够用了;但如果你需要精确控制流程,这种写法会产生误导。
 楼主| 发表于 5 天前 | 显示全部楼层
77七 发表于 2026-4-14 17:33
问了下ai,关于1楼的c语言代码

问:代码中的进度条功能 可以表示真正进度吗?

换一个思路:不用考虑进度条,启动 DrvIndex.exe 后运行一个批处理,其判断 DrvIndex.exe 在运行,显示信息:正在安装本地驱动 ... ... ,当 DrvIndex.exe 运行结束,提示:安装完成,并刷新 explorer.exe。pecmd EXEC  =!DrvIndex.exe 就是隐藏运行并等待  DrvIndex.exe 进程结束再执行后面的命令。但不论是等待或隐藏运行,就会出现一段时间的屏幕假死等待,什么也不会显示。
 楼主| 发表于 5 天前 | 显示全部楼层
77七 发表于 2026-4-14 17:33
问了下ai,关于1楼的c语言代码

问:代码中的进度条功能 可以表示真正进度吗?

这段代码我没法使用,不会编译成 exe。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-4-19 19:32

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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