无忧启动论坛

标题: 求个判断当前系统是否是ramos的批处理 [打印本页]

作者: shuini    时间: 2022-10-3 21:09
标题: 求个判断当前系统是否是ramos的批处理
为避免频繁修改ramos,很多软件都采用了外置方式,启动ramos后,批处理一键释放导入到系统中。
如果能开机设置个脚本,自动判断当前系统是否是ramos,如是则执行导入释放,若不是,则无动作。否则实体系统下误导入就徒增麻烦了。

作者: shuini    时间: 2022-10-3 21:17
以可用内存为判定标准似乎不太可靠,万一哪天拔了部分内存而忘了重新设置判定标准呢?
作者: nttwqz    时间: 2022-10-3 21:48
本帖最后由 nttwqz 于 2022-10-3 21:51 编辑

PE我一般判断当前系统盘符是否是X:,RAMOS没玩过,盘符是否是C:?执行下面命令看下返回结果

  1. fsutil fsinfo drivetype c:
复制代码


如果只是用于判断自己的RAMOS,而非通用RAMOS,那么可以修改RAMOS加个特定的文件或特定的注册表键值,这样通过判断该文件或注册表键值是否存在即可。
作者: shuini    时间: 2022-10-3 23:12
nttwqz 发表于 2022-10-3 21:48
PE我一般判断当前系统盘符是否是X:,RAMOS没玩过,盘符是否是C:?执行下面命令看下返回结果

盘符依然是C。
实体VHD和ramos系统上没差别,ramos只是把整个vhd载入内存而已
作者: shuini    时间: 2022-10-4 01:00
本帖最后由 shuini 于 2022-10-4 01:04 编辑

两个思路。
一个是修改G4D启动菜单,即加载ramos后再执行指定的批处理,估计不好办,因为对G4D的理解也就止于启动镜像而已,其他的一无所知。
第二个是ramos启动完成后先执行一个批处理,检查vhd文件的修改时间,实体运行vhd的话,vhd的修改时间几乎时刻在跟着当前时间改变,而ramos不会,源vhd文件的修改时间不会改变。那么如果vhd的修改时间距离当前时间较久,比如五分钟秒以上,即可判断当前的系统是ramos,反之,如果vhd的修改时间和当前时间差距在数秒之内,即可判断当前启动的是实体vhd。据此,自动作出是否执行目标批处理的选择。

烦请脚本好手相助。

作者: dos时代菜鸟    时间: 2022-10-4 07:28
本帖最后由 dos时代菜鸟 于 2022-10-4 07:30 编辑

用 devcon 找一下 系统分区所在硬盘 的 指定设备 id ,通过驱动判断是否 为 内存盘。

diskpart 或者 vbs /wimc 等调用 系统 api ,查看 硬盘 接口和名称。

pecmd 2012 应该可以。




作者: likeyouli    时间: 2022-10-4 08:18
shuini 发表于 2022-10-3 23:12
盘符依然是C。
实体VHD和ramos系统上没差别,ramos只是把整个vhd载入内存而已

我一直想请教怎么简单的判断当前系统是不是VHD? 自己装的系统太多了,有时候有点蒙,
作者: dos时代菜鸟    时间: 2022-10-4 08:59


如图 ,用 pnputil + find 可以判断系统中有无 ram 盘。 不知道是否通用 。

通过vbs 或者 wmic 估计也可以。




作者: szwp    时间: 2022-10-4 09:02
likeyouli 发表于 2022-10-4 08:18
我一直想请教怎么简单的判断当前系统是不是VHD? 自己装的系统太多了,有时候有点蒙,

bcedit /v /enum {current}
作者: szwp    时间: 2022-10-4 09:06
俺的RAMOS是R驱,微软方式引导的
mountvol |findstr {d9b257fc-684e-4dcb-ab79-03cfa2f6b750} ||exit
判断是RAMOS批处理就自动下载最新版软件静默安装。
作者: likeyouli    时间: 2022-10-4 09:30
szwp 发表于 2022-10-4 09:02
bcedit /v /enum {current}
bcdedit /v /enum {current} , 谢谢大师,您的bcdedit 命令掌握的真厉害

1.png (12.6 KB, 下载次数: 122)

1.png

作者: nttwqz    时间: 2022-10-4 10:14
dos时代菜鸟 发表于 2022-10-4 08:59
如图 ,用 pnputil + find 可以判断系统中有无 ram 盘。 不知道是否通用 。

通过vbs 或者 wmic 估计 ...

好像可以通过sc query fbwf查询
作者: shuini    时间: 2022-10-4 11:02
成功了。
早上用vhd修改时间的方法试了一下,复杂,且动一次vhd,就得修改一次时间参数,不方便。
于是想是不是用获取加载的BCD注册表信息来判断,实体VHD加载的是外部BCD,ramos则是加载的内部BCD,信息不同的地方很多,容易判断。
刚想着,就看到了szwp朋友的两个回帖,直接了当用bcdedit命令获取了c盘标识符,结合他的句式“mountvol |findstr {d9b257fc-684e-4dcb-ab79-03cfa2f6b750} ||exit”,改了一下,脚本如下:

@echo off
if not "%1"=="wind" mshta vbscript:createobject("wscript.shell").run("""%~f0"" wind",vbhide)(window.close)&&exit
bcdedit /v /enum {current} |findstr {dc2f993e-42b7-11ed-b018-bc5ff4b8c93d} ||exit
start D:\SOFT\RAMSOFT\MyScripts\安装.bat

感谢szwp和各位参与讨论的朋友。
作者: shuini    时间: 2022-10-4 11:15
另外一个办法似乎也值得讨论一下,即g4d在把vhd载入内存后再载入一个小vhd,三五兆足够,里面就一个批处理,系统启动后指向并执行它。进实体vhd时虽然也会执行这个动作,但系统是找不到执行文件的,所以是无效的。
这方法的优点是不用在重新制作系统后修改脚本,可以一直用,而且不同ramos之间通用。

作者: szwp    时间: 2022-10-4 12:02
除了vhd还可wim方式ramos, 只要是ramdisk方式id通用
作者: ZMLoveLH    时间: 2022-10-4 13:01
我也想知道,看看大神们的解答啊
作者: shuini    时间: 2022-10-4 13:24
shuini 发表于 2022-10-4 11:15
另外一个办法似乎也值得讨论一下,即g4d在把vhd载入内存后再载入一个小vhd,三五兆足够,里面就一个批处理 ...

这方法也成功了。先是做了个10M的小vhd,然后g4d的菜单上启动项目上第一行添加了一句
map --mem(hd0,0)/IMG/000.vhd (hd2)
启动载入成功,但是是脱机的,需要手动联机后才有盘符,没有盘符这路径不知道怎么写了。。。

接着换做了个iso,数据格式,才几十K。添加
map --mem(hd0,0)/IMG/000.iso (0xff)
启动后正常显示。
作者: shuini    时间: 2022-10-4 13:28
嫌资源管理器上有个光驱碍眼,可以预先修改注册表隐藏它
作者: szwp    时间: 2022-10-4 14:27
各种方式的RAMOS都有其通用特征可以提取。俺建VHD的BCD是将VHD创建时间作为GUID加入的,不管在legacy还是UEFI,ID不会变,也不会重复创建引导项。
作者: szwp    时间: 2022-10-4 14:59
likeyouli 发表于 2022-10-4 09:30
bcdedit /v /enum {current} , 谢谢大师,您的bcdedit 命令掌握的真厉害

你要是熟悉diskpart的话,也可试用它来玩。
作者: a583091790    时间: 2022-11-28 17:30
自己制作的RAMOS肯定知道计算机名或是在某根目录下放一个标识性的文件。 然后用BAT判断 计算机名字 或是某文件是否存在,不就可以知道是不是RAMOS了吗。
作者: dos时代菜鸟    时间: 2022-11-29 11:20
本帖最后由 dos时代菜鸟 于 2022-11-29 11:21 编辑

pecmd 获取当前系统盘 所在硬盘的总线接口 和驱动id .

grub 虚拟盘



pe x:盘



vhd虚拟盘



正常系统盘



  1. envi drvx=%SystemDrive%
  2. envi &bustype=BusTypeUnknown,BusTypeScsi,BusTypeAtapi,BusTypeAta,BusType1394,BusTypeSsa,BusTypeFibre,BusTypeUsb,BusTypeRAID,BusTypeiScsi,BusTypeSas,BusTypeSata,BusTypeSd,BusTypeMmc,BusTypeVirtual,BusTypeFileBackedVirtual,BusTypeSpaces,BusTypeNvme,BusTypeSCM,BusTypeUfs,BusTypeMax

  3. part -raw list drv  %drvx%,drv_info
  4. mstr disk,part,bus=<1><2><-3>%drv_info%

  5. part -devid list disk %disk%,disk_info
  6. mstr diskid=<-1>%disk_info%

  7. ifex '%diskid%'='',envi diskid=%drvx%

  8. envi n=0
  9. forx *NL:, &bustype,typex,
  10. {
  11.         ifex #%n%=%bus%,envi bus=%typex%
  12.         calc n=%n%+1
  13. }

  14. mess  总线=[%bus%]\nDevID=[%diskid%]
复制代码





作者: shuini    时间: 2022-11-29 12:55
dos时代菜鸟 发表于 2022-11-29 11:20
pecmd 获取当前系统盘 所在硬盘的总线接口 和驱动id .

grub 虚拟盘

也是一种方法,感谢。
作者: 521sunshao    时间: 2022-11-29 16:56
1
作者: eyf    时间: 2022-11-29 17:19
本帖最后由 eyf 于 2022-11-29 17:22 编辑

如果是自用的RAMOS,制作RAMOS前,在根目录中放个文件做标记,批处理判断有这个文件就是RAMOS了,可以释放了!实体系统别放这个文件哦!

作者: nowayer    时间: 2023-11-28 21:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 2012飘水    时间: 2024-4-6 23:32
学习学习




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