无忧启动论坛

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

请问下有没有办法用批处理或者命令行小程序确定系统引导分区?

    [复制链接]
331#
 楼主| 发表于 2021-1-15 15:12:42 | 只看该作者
dos时代菜鸟 发表于 2021-1-15 14:51
这里面的情况还真多。

改进了一下。
或者自备一套 bcdedit+diskpart+chcp ,但这样做 体积就大了。

这个不太合适。我用32位的bcdedit在64位的系统里面,的确可以运行,但是需要加/store参数指定BCD的位置,而64位系统里面c:\windows\system32\bcdedit.exe会自动“关联”系统的那个BCD。而且感觉不同系统的bcdedit显示的结果,还有区别。如果能用系统的最好还是用系统的。

点评

嗯嗯,那还是不能 自备,就只能先这样了。 最好 64位系统,通过64位程序运行之,当然 64位系统下的32位下也能运行,只是在特定情况下可能找不到数据。  详情 回复 发表于 2021-1-15 15:22
回复

使用道具 举报

332#
发表于 2021-1-15 15:15:51 | 只看该作者
CodeHz 发表于 2021-1-15 15:09
哦,也对,不过判断架构不是可以用 PROCESSOR_ARCHITECTURE 吗(
所以先检测架构,是32位再检测WoW

这是个 不错的办法,判断 位数,再看看有没有 特定 文件夹。

另外 ,在查找 文件这个问题上 ,64位上的64 和  32位上的32 都到一个地方去找文件,就是 windows\system32  也就是没有区别的。

点评

不是,你在wow64重定向的情况下访问system32实际上是syswow64,批处理本身是无法直接访问“真正的”system32的  详情 回复 发表于 2021-1-15 15:17
回复

使用道具 举报

333#
发表于 2021-1-15 15:17:29 | 只看该作者
本帖最后由 CodeHz 于 2021-1-15 15:18 编辑
dos时代菜鸟 发表于 2021-1-15 15:15
这是个 不错的办法,判断 位数,再看看有没有 特定 文件夹。

另外 ,在查找 文件这个问题上 ,64位上 ...

我认为根本不用检测,直接尝试两个路径(sysnative, system32)就好了

点评

反应一个小问题 SmartMountFirmware X64 多了一个 pdata 区段, 删了运行也正常,还省了 512 Bytes.  详情 回复 发表于 2021-1-15 15:36
回复

使用道具 举报

334#
发表于 2021-1-15 15:18:21 | 只看该作者
liuzhaoyzz 发表于 2021-1-15 14:59
你这个判断不对,在XP下面运行,结果是当前环境是64位系统下的64位环境。
xp下面,%ProgramFiles%=C:\Pr ...

64位上的64 和 32位上的32 ,找文件 都到一个地方 就是 windows\system32 ,所以 无所谓
回复

使用道具 举报

335#
 楼主| 发表于 2021-1-15 15:19:33 | 只看该作者
CodeHz 发表于 2021-1-15 15:09
哦,也对,不过判断架构不是可以用 PROCESSOR_ARCHITECTURE 吗(
所以先检测架构,是32位再检测WoW

用PROCESSOR_ARCHITECTURE来判断cmd的位数,是很多人的误解,正确的结果是用%PROCESSOR_IDENTIFIER%的前三位是否是x86来判断。否则在32位的文件浏览器(比如MDIE,比如qq文件管理器,网络管理器,以及一些32位的打包安装程序内嵌的安装包)就会出错。
@echo off
rem 判断64位系统和32位系统
echo %PROCESSOR_IDENTIFIER%
if /i %PROCESSOR_IDENTIFIER:~0,3%==x86 (
        echo 32位操作系统
) else (
        echo 64位操作系统
)
pause


%PROCESSOR_ARCHITECTURE%对于64位系统,PROCESSOR_ARCHITEW6432=AMD64,这是一个确定的值。



但是对于64位系统32位的cmd,PROCESSOR_ARCHITECTURE=x86
对于64位系统64位的cmd,PROCESSOR_ARCHITECTURE=AMD64,还有可能是安腾IA-64
这是两种结果,这两种结果对应着cmd的位数,只要是x86,就一定是32位的cmd;只要不是x86,就一定是64位的cmd,这才是我们想要判断的。

回复

使用道具 举报

336#
发表于 2021-1-15 15:22:43 | 只看该作者
liuzhaoyzz 发表于 2021-1-15 15:12
这个不太合适。我用32位的bcdedit在64位的系统里面,的确可以运行,但是需要加/store参数指定BCD的位置 ...

嗯嗯,那还是不能 自备,就只能先这样了。
最好 64位系统,通过64位程序运行之,当然 64位系统下的32位下也能运行,只是在特定情况下可能找不到数据。
回复

使用道具 举报

337#
发表于 2021-1-15 15:27:09 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-15 15:50 编辑
CodeHz 发表于 2021-1-15 15:03
思考了以下你可以先尝试 %windir%\sysnative\bcdedit ,失败再尝试 %windir%\system32\bcdedit ,再不行 ...

64位下调用 32位 cmd 可以运行
%windir%\sysnative\ 这个路径 下 的 bcdedit 。

dir %windir%\sysnative\bcdedit.exe 也能找到


点评

其实没必要绕一圈,可以直接按我说的方法测试两个路径下的bcdedit那个存在就用哪个  详情 回复 发表于 2021-1-15 15:30
回复

使用道具 举报

338#
发表于 2021-1-15 15:30:08 | 只看该作者
dos时代菜鸟 发表于 2021-1-15 15:27
64位下调用 32位 cmd 可以运行
%windir%\sysnative\ 这个路径 下 的 bcdedit 。

其实没必要绕一圈,可以直接按我说的方法测试两个路径下的bcdedit那个存在就用哪个

点评

确实如此, 只是 考虑 在脚本开始时,检测下 必要的 外部命令是否 存在。来确保程序运行。  详情 回复 发表于 2021-1-15 15:54
回复

使用道具 举报

339#
发表于 2021-1-15 15:36:29 | 只看该作者
CodeHz 发表于 2021-1-15 15:17
我认为根本不用检测,直接尝试两个路径(sysnative, system32)就好了

反应一个小问题

SmartMountFirmware X64 多了一个 pdata 区段,
删了运行也正常,还省了 512 Bytes.



SmartMountFirmware_Remove_pdata.rar

3.33 KB, 下载次数: 11, 下载积分: 无忧币 -2

回复

使用道具 举报

340#
发表于 2021-1-15 15:54:39 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-15 15:58 编辑
CodeHz 发表于 2021-1-15 15:30
其实没必要绕一圈,可以直接按我说的方法测试两个路径下的bcdedit那个存在就用哪个

确实如此,
只是 考虑 在脚本开始时,检测下  必要的 外部命令是否 存在。来确保程序运行。

dpy.43.7z (2.67 KB, 下载次数: 11)

点评

这个版本,在一台电脑上面运行是对的。  详情 回复 发表于 2021-1-15 16:29
回复

使用道具 举报

341#
 楼主| 发表于 2021-1-15 16:29:08 | 只看该作者
dos时代菜鸟 发表于 2021-1-15 15:54
确实如此,
只是 考虑 在脚本开始时,检测下  必要的 外部命令是否 存在。来确保程序运行。

这个版本,在一台电脑上面运行是对的。

点评

Bcdedit 还是不准确,有问题  详情 回复 发表于 2021-1-15 17:22
回复

使用道具 举报

342#
发表于 2021-1-15 17:22:07 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-15 17:41 编辑
liuzhaoyzz 发表于 2021-1-15 16:29
这个版本,在一台电脑上面运行是对的。

Bcdedit 还是不准确,有问题

bcdedit 的 volume 序列 与 diskpart 不一致。看来 不能用 bcdedit 了


dpy.44.7z (2.35 KB, 下载次数: 20)
这个是 不带 bcdedit 的,感觉,不用 aip ,着个效果已经是极限了。

点评

结果是对的!辛苦了!  详情 回复 发表于 2021-1-15 20:03
哦???  发表于 2021-1-15 17:23
回复

使用道具 举报

343#
 楼主| 发表于 2021-1-15 17:23:15 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-8-12 09:13 编辑
527104427 发表于 2021-1-13 18:27
发现之前有几处输出弄错了,搞成错误输出了,导致批处理捕捉不到任何东西,再改一下吧:

        5大,我用360扫描m大的pecmd,然后找了个PECMD原始.EXE,这个不报病毒,集成你的源代码,好像不报病毒了,就是比较大,1.4MB,x86版本的。怎么你制作出来的这么小?原始文件784KB,386KB是加壳压缩了吗?
[MPRESS V2.00-V2.0X -> MATCODE Software   * Sign.By.fly * 20090423]

m大的pecmd,
https://www.lanzous.com/b279972/,里面有个目录是免杀版,根本不是免杀版本。

我不懂,瞎折腾的。

2021-01-15.rar

1018.11 KB, 下载次数: 4, 下载积分: 无忧币 -2

点评

做命令行程序,要用cli版pecmd,不然在cmd下看不到输出。 我是把内置资源全删了,所以才小。 既然你不需要看输出,那啥版本都无所谓了,哪个不报毒就用哪个吧。  详情 回复 发表于 2021-1-15 20:25
回复

使用道具 举报

344#
发表于 2021-1-15 18:05:01 | 只看该作者
谢谢分享
回复

使用道具 举报

345#
 楼主| 发表于 2021-1-15 20:03:15 | 只看该作者
dos时代菜鸟 发表于 2021-1-15 17:22
Bcdedit 还是不准确,有问题

bcdedit 的 volume 序列 与 diskpart 不一致。看来 不能用 bcdedit 了

结果是对的!辛苦了!
回复

使用道具 举报

346#
发表于 2021-1-15 20:27:37 | 只看该作者
bcdedit.rar (88.96 KB, 下载次数: 0)
xp可用的bdedit.exe

点评

bcdedit 不准确,与 diskpart 卷序列不一致。  详情 回复 发表于 2021-1-15 21:22
回复

使用道具 举报

347#
 楼主| 发表于 2021-1-15 20:35:09 | 只看该作者
527104427 发表于 2021-1-15 20:25
做命令行程序,要用cli版pecmd,不然在cmd下看不到输出。
我是把内置资源全删了,所以才小。
既然你不 ...

原来要用CLI版本的pecmd,我完全不知道啊,pecmd文件夹里面文件那么多,完全搞不懂怎么用,选择哪个好。

点评

其实,你用cmd的for命令提取输出,pecmd哪个版本都行,一样的  详情 回复 发表于 2021-1-15 22:16
回复

使用道具 举报

348#
发表于 2021-1-15 21:18:57 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-15 22:14 编辑

其实如果是 win 下 利用 wmic 最简单,就是据说是不准确

代码不过二十几行,有盘符就卸载,没盘符就挂载。
wmi_x3.7z (435 Bytes, 下载次数: 10)
如下:
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set "2ltr=z:"
  4. set "cmd1=wmic volume where "SystemVolume='True'" get deviceid,driveletter /format:value"
  5. for /f "delims=" %%c in ('!cmd1!') do (
  6.     for /f "delims=" %%h in ('echo:%%c') do (if not "%%h"=="" set %%h)
  7. )
  8. echo Deviceid=!Deviceid!
  9. echo DriveLetter=!DriveLetter!
  10. if defined Deviceid (
  11.     if not defined driveLetter  (
  12.         mountvol !2ltr! !deviceid!
  13.     ) else (
  14.         mountvol !driveLetter! /d
  15.     )
  16. )
  17. echo =====================^>
  18. for /f "delims=" %%c in ('!cmd1!') do (
  19.     for /f "delims=" %%h in ('echo:%%c') do (if not "%%h"=="" echo %%h)
  20. )
  21. pause
复制代码




回复

使用道具 举报

349#
发表于 2021-1-15 21:22:46 | 只看该作者

bcdedit 不准确,与 diskpart 卷序列不一致。
回复

使用道具 举报

350#
发表于 2021-1-15 21:55:18 | 只看该作者
liuzhaoyzz 发表于 2021-1-15 14:10
我用了奇技淫巧解决32位的第三方资源管理器下面调用c:\widnows\system32\下面的程序,就是用创建软链接, ...

mklink %temp%\cmd.exe  C:\windows\system32\cmd.exe
我使用好久了,还有个特性,就是使用这招前似乎不能执行其它程序,不然失效,

点评

win7 下 mklink 需要特权(  详情 回复 发表于 2021-1-15 22:02
回复

使用道具 举报

351#
发表于 2021-1-15 22:02:08 | 只看该作者
江南一根葱 发表于 2021-1-15 21:55
mklink %temp%\cmd.exe  C:\windows\system32\cmd.exe
我使用好久了,还有个特性,就是使用这招前似乎不 ...

win7 下 mklink 需要特权(
回复

使用道具 举报

352#
 楼主| 发表于 2021-1-16 09:02:57 | 只看该作者
527104427 发表于 2021-1-15 22:16
其实,你用cmd的for命令提取输出,pecmd哪个版本都行,一样的
一般都是用这几个文件:
pecmd原始.exe

我下载了m大网盘里面的pecmd最新版本。用360扫描结果如下:
扫描结果
======================
高危风险项
----------------------
C:\PECMD2012.1.88.05.84Stable-210112B\免杀版\PECMD.exe        木马程序(Generic/HEUR/QVM41.2.9A2B.Malware.Gen)        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\BCDTOOL.EXE        HEUR/QVM41.2.A2CF.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\命令行加载外置-统一便捷版.exe        HEUR/QVM06.3.A2CF.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\DLL版\pecmd_min.exe        HEUR/QVM20.1.A2CF.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\X64\PECMD巨小.EXE        HEUR/QVM202.0.A2CF.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\无Imd版\X64\PECMD.EXE        HEUR/QVM202.0.A2CF.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\精简PECMD\PECMD巨小.EXE        HEUR/QVM18.1.A2CF.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\精简PECMD\X64\PECMD.EXE        HEUR/QVM202.0.A2CF.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\精简PECMD\X64\PECMD巨小.EXE        HEUR/QVM202.0.A2CF.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\PECMD巨小.EXE        QVM18.1.BA3F.Malware.Gen        未处理
C:\PECMD2012.1.88.05.84Stable-210112B\DLL版\PECMD巨小.DLL        QVM38.0.BA3F.Malware.Gen        未处理
可疑文件上传结果
----------------------
c:\pecmd2012.1.88.05.84stable-210112b\精简pecmd\x64\pecmd巨小.exe        上传成功


我看了下,精简版容易报病毒;dll版本容易报病毒,我喜欢直接exe版本的;巨小版本可能是加壳压缩的,容易报病毒;免杀版根本不能算免杀版,容易报病毒。
直接用pecmd根目录的\PECMD2012.1.88.05.84Stable-210112B\PECMD原始_cli.EXE(32位)和\PECMD2012.1.88.05.84Stable-210112B\X64\PECMD原始_cli.EXE就行了。

文件名称: PECMD原始_cli.EXE
文件大小: 1.40 MB (1,470,976 字节)
文件版本: 201201.88.05.84 X86
修改时间: 2021年01月12日,17:49:35
MD5: F1D167B7B09D5B61252F94FA8005D242


文件名称: PECMD原始_cli.EXE
文件大小: 1.73 MB (1,810,944 字节)
文件版本: 201201.88.05.84 X64
修改时间: 2021年01月12日,17:49:56
MD5: AA3EFBBA521B3E3BAD9E97E0CE40A95F


5大你用的是基于哪个版本?
恳请5大再次出手,用这两个版本制作精简版本(就是你说的删除没用资源,我不知道删除哪些),如果还是过不了360,就直接用原始版本好了,可能精简了资源文件的360之类的容易报病毒。

360扫描pecmd结果.png (58.74 KB, 下载次数: 127)

360扫描pecmd结果.png

点评

我用的就是这两个,估计是删除了资源就报毒吧,直接用原版好了  详情 回复 发表于 2021-1-16 09:32
回复

使用道具 举报

353#
 楼主| 发表于 2021-1-16 09:44:43 来自手机 | 只看该作者
527104427 发表于 2021-1-16 09:32
我用的就是这两个,估计是删除了资源就报毒吧,直接用原版好了

好的,明白了,谢谢!
回复

使用道具 举报

354#
 楼主| 发表于 2021-1-16 13:12:29 | 只看该作者
527104427 发表于 2021-1-16 09:32
我用的就是这两个,估计是删除了资源就报毒吧,直接用原版好了

在5大的指导下,用cli版本,成功搞定了ChkMbrPbr,通过了360流氓卫士的检测。能通过360流氓卫士的检测,我估计其他的杀软也会检测通过。
bootmgr/bootmgfw.efi引导的windows或者pe.wim环境下,判断正确。

xp环境下,判断正确。

感谢5大!



ChkMbrPbr2021-01-16.rar

2.11 MB, 下载次数: 31, 下载积分: 无忧币 -2

回复

使用道具 举报

355#
 楼主| 发表于 2021-1-20 16:53:25 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-20 16:55 编辑

@527104427
5大,虚拟机有时候出错,不知道咋回事。环境是VMware里面,挂载个PE.ISO启动,从光盘启动pe.iso,vm里面有个虚拟硬盘,MBR格式的,结果启动分区定位到了PE所在的X盘。
codeHZ的代码不出错,结果是空值,这是正确的。我想要的结果是运行的时候不抛错,不弹出这个错误的对话框,否则让人迷惑,而且批处理会失去焦点。

用的这个:
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=423802&pid=4221007&fromuid=298214



Windows 10 x64-2021-01-20-16-38-14.png (292.37 KB, 下载次数: 118)

Windows 10 x64-2021-01-20-16-38-14.png

点评

pe发上来看看  详情 回复 发表于 2021-1-20 18:14
回复

使用道具 举报

356#
 楼主| 发表于 2021-1-20 19:47:24 来自手机 | 只看该作者
527104427 发表于 2021-1-20 18:14
pe发上来看看

不好意思5大,我在外面吃饭,回去后发

点评

第一个问题,关于启动分区判断不准的,用这个试试: 第二个问题,关于报错的,在第二行加入: LOGS **t=1 **ON=1 **2 * "%Desktop%\xxxx.LOG" 打印出LOGS看看问题出在哪条命令。 然后再用下面这个捕捉一下,  详情 回复 发表于 2021-1-20 20:15
回复

使用道具 举报

357#
 楼主| 发表于 2021-1-20 21:34:04 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-20 21:54 编辑
527104427 发表于 2021-1-20 20:15
第一个问题,关于启动分区判断不准的,用这个试试:

https://cloud.189.cn/t/BjmEfa3ueiqe
下载WePE_64_V2.1.iso

我试试看。刚才试了下,2021-01-20日的版本,似乎不报错了。
2021-01-19日的版本报错。===
xxx.log我上传上来,你看看是不是这个。

Windows 10 x64-2021-01-20-21-46-29.png (43.08 KB, 下载次数: 107)

Windows 10 x64-2021-01-20-21-46-29.png

xxxx.rar

3.84 KB, 下载次数: 2, 下载积分: 无忧币 -2

点评

图片上主要的信息没显示出来,想看看是哪个进程发起的弹窗  详情 回复 发表于 2021-1-20 22:11
回复

使用道具 举报

358#
 楼主| 发表于 2021-1-20 22:59:00 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-21 12:35 编辑
527104427 发表于 2021-1-20 22:11
图片上主要的信息没显示出来,想看看是哪个进程发起的弹窗,就是最后一栏
看LOGS,是卡在 FIND *&&drvle ...


我传上来。我感觉出错的原因可能是ChkMBRPBR尝试卸载光驱所在的盘符导致出错。

ChkMbrPbr2021-01-20.rar

3.05 MB, 下载次数: 10, 下载积分: 无忧币 -2

点评

请问有比这个更新的版本吗? 源码很有学习价值,求分享!  详情 回复 发表于 2021-8-12 01:02
回复

使用道具 举报

359#
发表于 2021-1-26 23:31:59 | 只看该作者
总结下用脚本实现的几个方案:

bcd_volume.7z (4.17 KB, 下载次数: 31)
用 wmi 的,用 bcdedit+mountvol 的,还有用 diskpart 的,还有 pecmd 脚本通过 调用api 实现的。。


点评

感谢分享,已收藏!  详情 回复 发表于 2021-1-27 08:57
回复

使用道具 举报

360#
 楼主| 发表于 2021-1-27 08:57:17 | 只看该作者
dos时代菜鸟 发表于 2021-1-26 23:31
总结下用脚本实现的几个方案:

感谢分享,已收藏!

点评

bcdedit + mountvol 可以不受 注册表限制,即使 注册表中没有 信息,也能找到。但xp 不行。 pecmd 方案 要读取 注册表 diskpart 只适用于 本地win系统 wmi 适用于本地win 系统  详情 回复 发表于 2021-1-27 11:28
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-11 21:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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