无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 7684|回复: 45
打印 上一主题 下一主题

请问下有没有命令行小工具能够显示ISO光盘镜像的卷标?

    [复制链接]
跳转到指定楼层
#
发表于 2021-2-19 09:40:37 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 liuzhaoyzz 于 2021-2-19 09:46 编辑

请问下有没有命令行小工具能够显示ISO光盘镜像的卷标?
       我在无忧论坛、批处理之家论坛、github找了,没有找到合适的命令行工具,请问下有没有命令行小工具能够显示ISO光盘镜像的卷标?希望是用c/c++/pecmd/delphi/au3/ahk等等之类的语言写的,windows-api-GetDriveVolume和GetVolumeInformation好像可以搞定,有没有现成的,不需要重复造轮子的?


折腾这个的原因是,openSUSE好像只支持通过label识别iso镜像确定为root,不能通过uuid识别iso镜像,我尝试过root=live:UUID=xxxx或者root=UUID=xxxx,但是没有成功。grub2下面用probe可以确定,grub4dos的vol好像只能显示iso的前16个字符,例如“openSUSE_Leap_15”,在windows下面用软媒魔方虚拟光驱(小俊去广告)版本挂载ISO显示的也是16个字符的“openSUSE_Leap_15”,(openSUSE的label不支持模糊搜索,郁闷的很),可是openSUSE说他是“openSUSE_Leap_15.2_KDE_Live”,我用ultraiso挂载之后显示的也是“openSUSE_Leap_15.2_KDE_Live”,标准Joliet(64)格式,文件名windows/unix(31),看样子还是ultraiso能力强。


menuentry 'openSUSE Leap 15.2 KDE LiveCD [root/空]' --unrestricted {
loopback loop0 $prefix/linux/openSUSE-Leap-KDE-Live.iso
linux  (loop0)/boot/x86_64/loader/linux root=live:CDLABEL=openSUSE_Leap_15.2_KDE_Live iso-scan/filename=/grub/linux/openSUSE-Leap-KDE-Live.iso   systemd.wants=sshd.service lang=zh_CN
initrd (loop0)/boot/x86_64/loader/initrd
}


grub4dos:vol
map /grub/linux/openSUSE-Leap-KDE-Live.iso (hd32)
map --hook
vol (hd32)
set x=%?%
echo %x%


grub2:--label, -l 检测文件系统卷标
probe --set=x --label (loop);




光盘文件系统(CDFS)的作用与我们所熟悉的FAT16、FAT32等硬盘文件系统的作用基本上是一样的,目前最常见的3种光盘文件系统是:


ISO-9660:由国际标准化组织于1985年颁布,是目前唯一通用的光盘文件系统,任何类型的计算机以及所有的刻录软件都提供对它的支持。因此,如果想让刻录好的光盘能被所有的CD-ROM驱动器都顺利读取的话,那就最好使用ISO-9660或与其兼容的文件系统;其他的文件系统只能在CD-R或CD-RW上读取,限制了光盘的通用性。ISO-9660目前有Level1和Level2两个标准。Level1与DOS兼容,文件名采用传统的8.3格式,而且所有字符只能是26个大写英文字母、10个阿拉伯数字及下划线。Level2则在Level的基础上加以改进,允许使用长文件名,但不支持DOS。


Joliet:微软公司自行定义的光盘文件系统,也是对ISO-9660文件系统的一种扩展,它支持Windows9x/NT和DOS,在Windows9x/NT下文件名可显示64个字符,可以使用中文。


Romeo:著名的Adaptec公司自行定义的文件系统,支持Windows9x/NT,文件名最多可有128个字符,也支持中文,但不支持DOS。



Windows 10 x64-2021-02-19-09-38-53.png (16.99 KB, 下载次数: 107)

Windows 10 x64-2021-02-19-09-38-53.png

openSUSE光盘格式.png (63.62 KB, 下载次数: 97)

openSUSE光盘格式.png
45#
发表于 2022-1-8 18:21:26 | 只看该作者
paragon extfs可以很好地在windows下面读写ext4分区里面的文件啊?你的意思是不要这样子的paragon extfs,读取一些uuid啥的?

我更倾向于使用 开源 命令行 软件。没有就自己写。
里面的很多功能也是在测试,为以后grub2开发做准备 (比如写mbr, pbr)。
回复

使用道具 举报

44#
 楼主| 发表于 2022-1-8 17:31:20 | 只看该作者
wintoflash 发表于 2022-1-8 16:01
现在修复了。退出时会恢复原来的代码页。
当然编码的问题也没有最终解决。
因为 GRUB2 内部都是处理 UT ...

测试了新版,cmd编码没有问题了。可以正常显示。

我写这个程序主要是想在windows下提取我的ext4分区里面的文件。其他功能都是顺手加上的。

paragon extfs可以很好地在windows下面读写ext4分区里面的文件啊?你的意思是不要这样子的paragon extfs,读取一些uuid啥的?

很多功能我也只是在胡乱地尝试,我没有什么明确的目标和需求,等你以后完工后希望来个详细的readme.txt+用法demo。
回复

使用道具 举报

43#
发表于 2022-1-8 16:01:54 | 只看该作者
liuzhaoyzz 发表于 2022-1-8 10:29
你的这个diskfire执行之后,似乎改变了cmd的编码?后面变成了乱码。

现在修复了。退出时会恢复原来的代码页。
当然编码的问题也没有最终解决。
因为 GRUB2 内部都是处理 UTF-8 字符串的,所以要转成 UTF-8 代码页,否则没办法显示非 ASCII 文件名。
这样就带来另一个问题:cmd 命令行字符串的编码是未知的 (一般不是 UTF-8),所以目前命令行不支持非 ASCII 路径。
目前程序的一些功能还没有写,因此我暂时没有解决这方面的问题。
在我的计划中,我是准备集成 Lua 的,这样用户可以用 Lua 脚本处理磁盘分区与文件,这时候只要保证 Lua 脚本是 UTF-8 编码的就好了。

probe OPTIONS [DISK]
Retrieve disk info.
OPTIONS:
  --partmap   Determine partition map type.
  --fs        Determine filesystem type.
  --fsuuid    Determine filesystem UUID.
  --label     Determine filesystem label.
  --size      Determine disk/partition size (bytes).
  --start     Determine partition starting LBA (sectors).
  --bus       Determine bus type.
  --rm        Determine if the disk is removable.
  --pid       Determine product id.
  --vid       Determine vendor id.
  --letter    Determine drive letters.
  --partuuid  Determine partition UUID.
  --flag      Determine partition flags.

正确命令应该是
probe --fsuuid (hdx,y)
probe --bus (hdx)
这样。如果不加磁盘/分区参数,就显示所有磁盘/分区的。
好像参数有点问题啊?disk用什么表示的?f:这样子的windows表示方法不行吗?

为什么我不采用 Windows 式盘符?因为有的分区不一定有盘符(ESP)。有的系统(比如XP)不支持一些分区表 (GPT)。
我写这个程序主要是想在windows下提取我的ext4分区里面的文件。其他功能都是顺手加上的。
哦,试了下,disk应该用hd0这样子的,问题是diskfire_x64.exe probe提示error: missing arguments.
diskfire_x64.exe probe hd0,为啥还显示出了hd1?
F:\bak\diskfire>diskfire_x64.exe probe hd0

这两句都有语法错误。你要 probe 这个磁盘的具体什么信息?
我之所以不想一次性打印所有信息,就是为了将来支持 Lua 脚本后,可以更方便地让用户自己组织输出形式。
3、hd2是vhd,似乎不能获取uuid?

hd2 不是一个带有文件系统的分区。一个分区应该是 (hd2,x) 这种形式。
我故意用 --fsuuid 参数而不是 --uuid,就是想提醒用户,这个 UUID 是与文件系统相关的。
--------------
总之,这个程序我还没有写完,目前功能仅供参考,以后不保证会保持同样的形式提供这些功能。

点评

测试了新版,cmd编码没有问题了。可以正常显示。 paragon extfs可以很好地在windows下面读写ext4分区里面的文件啊?你的意思是不要这样子的paragon extfs,读取一些uuid啥的? 很多功能我也只是在胡乱地尝试  详情 回复 发表于 2022-1-8 17:31
回复

使用道具 举报

42#
 楼主| 发表于 2022-1-8 10:29:22 | 只看该作者
wintoflash 发表于 2022-1-7 19:38
这种?把grub2部分功能弄到windows下的效果。

你的这个diskfire执行之后,似乎改变了cmd的编码?后面变成了乱码。

QQ截图20220108102902.png (10.74 KB, 下载次数: 44)

QQ截图20220108102902.png

diskfire.rar

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

点评

现在修复了。退出时会恢复原来的代码页。 当然编码的问题也没有最终解决。 因为 GRUB2 内部都是处理 UTF-8 字符串的,所以要转成 UTF-8 代码页,否则没办法显示非 ASCII 文件名。 这样就带来另一个问题:cmd 命令  详情 回复 发表于 2022-1-8 16:01
回复

使用道具 举报

41#
 楼主| 发表于 2022-1-7 21:35:06 | 只看该作者
wintoflash 发表于 2022-1-7 19:38
这种?把grub2部分功能弄到windows下的效果。

看样子,你又有作品了!
回复

使用道具 举报

40#
发表于 2022-1-7 19:38:53 | 只看该作者
这种?把grub2部分功能弄到windows下的效果。

点评

你的这个diskfire执行之后,似乎改变了cmd的编码?后面变成了乱码。  详情 回复 发表于 2022-1-8 10:29
看样子,你又有作品了!  详情 回复 发表于 2022-1-7 21:35
回复

使用道具 举报

39#
 楼主| 发表于 2021-2-26 14:02:51 | 只看该作者
fuldho 发表于 2021-2-26 13:42
autoit3 从0x8028开始,32个字节都是卷标

$hfile=FileOpen("grlb2.iso",16)

感谢!
回复

使用道具 举报

38#
发表于 2021-2-26 13:42:25 | 只看该作者
liuzhaoyzz 发表于 2021-2-19 14:04
这个只能解析某个具体已挂载的盘符的卷标吧,我想要的是在windows下面解析E:\linux\openSUSE\openSUSE-Le ...

autoit3 从0x8028开始,32个字节都是卷标

$hfile=FileOpen("grlb2.iso",16)
$sText=FileRead($hFile)
$jb=BinaryToString(BinaryMid($sText, 32809, 32),1)
MsgBox(0,"卷标",$jb)

点评

感谢!  详情 回复 发表于 2021-2-26 14:02
回复

使用道具 举报

37#
发表于 2021-2-26 10:48:12 | 只看该作者
pecmd 已经具备 简单的解析类语言的特性,应该重新 统一规范指令语法。这种脚本解析类语言 是未来趋势.
回复

使用道具 举报

36#
 楼主| 发表于 2021-2-25 23:23:08 | 只看该作者
527104427 发表于 2021-2-25 20:58
因为 ChkMbrPbr 是支持 PECMD 命令的,所以另外提供几条命令,仅供参考。
推荐楼主还是改玩 PECMD 吧, ...

pecmd太复杂了,我看着就头大,玩不转,只有你们这些高人才行。
回复

使用道具 举报

35#
发表于 2021-2-25 13:46:11 来自手机 | 只看该作者
不太清楚,我也是想知道他怎么打包的。
回复

使用道具 举报

34#
 楼主| 发表于 2021-2-25 13:38:59 | 只看该作者
527104427 发表于 2021-2-25 12:03
他这个ISO是改造过的吧,头部是个EXE,后面是个ISO。

试过了,是对的。
5大辛苦了!

点评

因为 ChkMbrPbr 是支持 PECMD 命令的,所以另外提供两条命令 将ANSI编码转换成UTF-8编码: ChkMbrPbr_x64.exe CODE -ANSI,"D:\menu.lst",-UTF8,"D:\menu.lst" 判断是否UEFI启动: for /f %%a in ('"Chk  详情 回复 发表于 2021-2-25 20:58
回复

使用道具 举报

33#
发表于 2021-2-25 10:27:17 来自手机 | 只看该作者
本帖最后由 窄口牛 于 2021-2-25 10:29 编辑

就是神雕前段发的那个iso,比较奇怪他怎么打包的。linux系统区15年的老帖子,年底修改的那个

点评

他这个ISO是改造过的吧,头部是个EXE,后面是个ISO。 [attachimg]475772[/attachimg]  详情 回复 发表于 2021-2-25 12:03
回复

使用道具 举报

32#
发表于 2021-2-25 09:49:42 | 只看该作者
本帖最后由 窄口牛 于 2021-2-25 09:51 编辑
  1. file slitaz-rolling-core64-cn.iso
  2. slitaz-rolling-core64-cn.iso: DOS/MBR boot sector ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) 'SliTaz LiveCD' (bootable); partition 1 : ID=0xee, start-CHS (0x0,0,1), end-CHS (0x3ff,254,63), startsector 1, 118843 sectors
复制代码

自动的很难没有问题。


点评

有问题可以改嘛,这个世界上哪有任何bug都不存在的程序呢? 这里有两三个解决方案: 1.如果不嫌麻烦,你可以把iso传上来,我可以分析。 2.用winhex搜索字符串CD001,看是哪几个位置 3.我放宽限制,不再判断是否i  详情 回复 发表于 2021-2-25 10:21
回复

使用道具 举报

31#
 楼主| 发表于 2021-2-24 22:10:06 | 只看该作者

这个版本,试了下,结果是正确的了!感谢5大!
回复

使用道具 举报

30#
 楼主| 发表于 2021-2-24 22:06:02 | 只看该作者
conlin888 发表于 2021-2-24 16:29
看来还是挂载靠谱些

PECMD脚本:

挂载的方案,不考虑,因为需要驱动加持,不方便。
回复

使用道具 举报

29#
发表于 2021-2-24 16:29:32 | 只看该作者
看来还是挂载靠谱些

PECMD脚本:

//PECMD会自动安装Imdisk
set &file=fossapup64-9.5.iso
fdrv *idlec &pf=*:
mstr * &pf=<1>&pf
ramd imdisk* -a -m %&pf% -f %&file%
fdrv *vol &vol=%&pf%
mess. %&vol%
ramd imdisk* -D -m %&pf%
回复

使用道具 举报

28#
 楼主| 发表于 2021-2-24 15:53:55 | 只看该作者
窄口牛 发表于 2021-2-24 15:46
Linux是utf8,批处理是ansi,加一句转码语句。

好像不是cmd转码的问题。我试了chcp 65001,好像更加乱套了!

直接双击ISO挂载,我的电脑里面显示卷标是CDROM。这和ultraiso显示是一致的。
plusv的程序没问题。

QQ截图20210224155320.jpg (71.82 KB, 下载次数: 93)

QQ截图20210224155320.jpg
回复

使用道具 举报

27#
发表于 2021-2-24 15:46:27 来自手机 | 只看该作者
liuzhaoyzz 发表于 2021-2-24 15:16
不对啊?怎么是乱码?
?剏??????????????
CDlabel=?剏??????????????

Linux是utf8,批处理是ansi,加一句转码语句。
回复

使用道具 举报

26#
发表于 2021-2-24 15:45:19 来自手机 | 只看该作者
liuzhaoyzz 发表于 2021-2-24 15:30
你误会了,哪里有linux发行版强行要求固定卷标的???是通过卷标定位光盘。

结果有差别吗?
回复

使用道具 举报

25#
 楼主| 发表于 2021-2-24 15:40:32 | 只看该作者
527104427 发表于 2021-2-24 15:39
这个iso发给我研究一下,看看什么特征

清华大学开源软件镜像站 | Tsinghua Open Source Mirror
https://mirrors.tuna.tsinghua.edu.cn/puppy/puppy-fossa/
fossapup64-9.5.iso
MD5:6a45e7a305b7d3172ebd9eab5ca460e4  fossapup64-9.5.iso
回复

使用道具 举报

24#
 楼主| 发表于 2021-2-24 15:30:25 | 只看该作者
窄口牛 发表于 2021-2-24 07:55
不是所有的Linux启动都与卷标有关,个别的一部分,确实有要求媒体必须固定卷标。这个确实有点意思,临时修 ...

你误会了,哪里有linux发行版强行要求固定卷标的???是通过卷标定位光盘。
回复

使用道具 举报

23#
 楼主| 发表于 2021-2-24 15:16:55 | 只看该作者
527104427 发表于 2021-2-24 00:21
改成跟 UltraISO 一样的逻辑。

不对啊?怎么是乱码?
?剏??????????????
CDlabel=?剏??????????????
请按任意键继续. . .

@echo off
set "ChkMbrPbr=%~sdp0ChkMbrPbr_x86.exe"
for /f %%i in ('%ChkMbrPbr% -ChkISOVol "E:\linux\puppy\fossapup64-9.5.iso"') do set "CDlabel=%%i"
echo CDlabel=%CDlabel%
pause





回复

使用道具 举报

22#
发表于 2021-2-24 08:09:11 来自手机 | 只看该作者
隔壁论坛有人探讨无gui运行bug10,你这一段儿鼓捣这么多自动的东西,下一步可以不要任何gui了。
回复

使用道具 举报

21#
发表于 2021-2-24 07:55:38 来自手机 | 只看该作者
本帖最后由 窄口牛 于 2021-2-24 08:01 编辑

不是所有的Linux启动都与卷标有关,个别的一部分,确实有要求媒体必须固定卷标。这个确实有点意思,临时修改卷标名称,以启动不同的在优盘里的Linux系统?这种垃圾限制导致你把它解开在fat分区,都通过菜单无法启动,本来就不需要移动媒体了的,你还得搞个优盘看它到底需要什么条件导致,efi启动还必须烧录优盘。
回复

使用道具 举报

20#
发表于 2021-2-22 17:04:38 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-2-22 19:00 编辑

我在 pecmd 的包里找到了个这,编了个批处理,或许。。。。。哈哈哈

xxd.x64.7z (254.51 KB, 下载次数: 10)




中文卷标 支持不了。


回复

使用道具 举报

19#
发表于 2021-2-20 10:06:12 | 只看该作者
liuzhaoyzz 发表于 2021-2-20 09:54
可能comment对于有的ISO有,有的就没有,从字面上来讲,好像是“备注”的意思,如果iso没有这个备注,估 ...

有道理
回复

使用道具 举报

18#
 楼主| 发表于 2021-2-20 09:54:37 | 只看该作者

可能comment对于有的ISO有,有的就没有,从字面上来讲,好像是“备注”的意思,如果iso没有这个备注,估计就不行。这个方法不通用。

QQ拼音截图20210220095332.png (22.52 KB, 下载次数: 84)

QQ拼音截图20210220095332.png
回复

使用道具 举报

17#
发表于 2021-2-20 09:31:04 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-2-20 09:33 编辑

捕获.PNG (15.64 KB, 下载次数: 111)

捕获.PNG
回复

使用道具 举报

16#
 楼主| 发表于 2021-2-20 09:29:08 | 只看该作者
dos时代菜鸟 发表于 2021-2-20 09:00
我用的是 18.05 的
高版本的,用 7z 打开 一个 iso ,看看 iso 属性,如果能显示  注释 卷标,就应该可以 ...

好像没看到啊?

QQ拼音截图20210220092851.png (12.18 KB, 下载次数: 100)

QQ拼音截图20210220092851.png
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 12:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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