无忧启动论坛

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

[求助] VHD挂载后如何确定盘符

[复制链接]
跳转到指定楼层
1#
发表于 4 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
diskpart创建一个vhd磁盘,然后分区格式化,然后assign letter=v可以指定盘符


如果是现成的vhd文件,直接批处理加载
SELECT VDISK FILE="c:\test\test.vhd"
attach vdisk(此时盘符就已经加载了)
assign letter=v(在用assign指定盘符就不起作用了)




因为我需要加载vhd,确定这个盘符比如是e,比如是g,或者指定为我指定的盘符,比如是v,
这样好后续执行这个盘符中的程序,比如v:\test.exe
2#
发表于 4 天前 | 只看该作者
大概率得先删除现在的盘符,再分配新的盘符。
回复

使用道具 举报

3#
发表于 4 天前 | 只看该作者
用PECMD吧


set^ ForceLocal=1
set^ EnviMode=1
set file0=C:\test\test.vhd
fdrv -rsort drv0=*:
forx *v drv0,drv,
{
        part list dep %drv%,file
        find *file=file0,
        {
                exec %drv%\test.exe
                exit
        }











点评

好的多谢!我在windows下面用,无所谓,pecmd也可以,ahk也可以,批处理也可以,只要能达到效果就行。 我现在是尽量少用vbs,一个是自己不懂,第二是新windows禁用了 我测试一下效果  详情 回复 发表于 4 天前
回复

使用道具 举报

4#
 楼主| 发表于 4 天前 | 只看该作者
本帖最后由 freesoft00 于 2024-11-9 22:22 编辑

好的多谢!我在windows下面用,无所谓,pecmd也可以,ahk也可以,批处理也可以,只要能达到效果就行。
我现在是尽量少用vbs,一个是自己不懂,第二是新windows禁用了
我测试一下效果
我其实是封装系统部署进系统后加载vhd虚拟磁盘,然后安装里面的软件


我目前使用的软件安装器是比较古老的xp实在的软件安装器,只能一个一个的软件安装。
等待的时间比较长,其实有些软件是可以同时安装的,就像现在的驱动安装工具是多线程同时安装。
但是有些软件是不能同时安装的,比如微软的一下msi程序,还有其它一些。这个就单独的一个一个安装

点评

这样的话,用PECMD挂载更快,找盘符也更快更精准,也不用diskpart了,启动太慢。 set^ ForceLocal=1 set^ EnviMode=1 set file0=C:\test\test.vhd moun-vhd %file0%,,,ret mstr* * disk,err=ret ifex $%  详情 回复 发表于 4 天前
回复

使用道具 举报

5#
发表于 4 天前 来自手机 | 只看该作者
本帖最后由 baby1277 于 2024-11-10 09:49 编辑

@echo off
:: 挂载VHD前列举所有盘符来创建临时文件夹
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i: md temp\%%i
:: 挂载VHD磁盘
echo SELECT VDISK FILE="c:\test\test.vhd" >mount1.txt
echo attach vdisk >>mount1.txt
diskpart /s mount1.txt >nul 2>nul
:: 挂载VHD后列举所有盘符来创建临时文件夹,能成功创建文件夹就是新增的VHD盘符。
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i: md temp\%%i 2>nul&& set pan=%%i
:: 运行指定程序
start ""  "%pan%:\test.exe"
:: 删除临时文件
del /f /q mount1.txt
rd /s /q temp
pause

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

6#
发表于 4 天前 | 只看该作者
::获取挂载前的盘符列表
for /f "tokens=1-4" %%a in ('wmic logicaldisk get caption') do (
    set "preMountDisks=!preMountDisks! %%a"
)
::挂载
(
echo select vdisk file="xx.vhdx"
echo attach vdisk
) | diskpart >nul 2>nul
::获取挂载后的盘符列表
for /f "tokens=1-4" %%a in ('wmic logicaldisk get caption') do (
    set "postMountDisks=!postMountDisks! %%a"
)
::比较前后盘符列表,得到挂载后的新盘符
set "newDriveLetter="
for %%a in (!postMountDisks!) do (
    set "found=false"
    for %%# in (!preMountDisks!) do if /i "%%#"=="%a" set "found=true"
    if "!found!"=="false" set "newDriveLetter=%%a"
)
echo New drive letter is: %newDriveLetter%

之前也考虑过这个问题,写了这个可用,但wmic快要被弃用了,pecmd应该是兼容性更好的方案

点评

试试这个还能用么 fsutil fsinfo drives  详情 回复 发表于 前天 08:40
代码测试也ok,开始没成功,忘记加变量延迟了,加了后可以了  详情 回复 发表于 3 天前
这个问题原来好像是在论坛中请教过,dos菜鸟 兄弟好像是给过答案,思路就是先列一下盘符,挂载后再列一下盘符,新增加的就是vhd的,好像是没有用wmic,因为太早了忘记了。也不记得原来问过没有了。  详情 回复 发表于 4 天前

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

7#
发表于 4 天前 来自手机 | 只看该作者
多区多盘符

点评

嗯,是有这个问题,但是因为vhd是自己创建的,所以一般是单分区,多分区了自己给自己找麻烦了 一开始我使用iso作为软件库的存放文件,但是有时候在安装win7的时候会遇到比较尴尬的局面,它默认不支持iso的挂载,  详情 回复 发表于 4 天前
回复

使用道具 举报

8#
 楼主| 发表于 4 天前 | 只看该作者
hlowld 发表于 2024-11-9 22:34
::获取挂载前的盘符列表
for /f "tokens=1-4" %%a in ('wmic logicaldisk get caption') do (
    set "p ...

这个问题原来好像是在论坛中请教过,dos菜鸟 兄弟好像是给过答案,思路就是先列一下盘符,挂载后再列一下盘符,新增加的就是vhd的,好像是没有用wmic,因为太早了忘记了。也不记得原来问过没有了。
回复

使用道具 举报

9#
 楼主| 发表于 4 天前 | 只看该作者

嗯,是有这个问题,但是因为vhd是自己创建的,所以一般是单分区,多分区了自己给自己找麻烦了

一开始我使用iso作为软件库的存放文件,但是有时候在安装win7的时候会遇到比较尴尬的局面,它默认不支持iso的挂载,而我要安装的软件比如winrar还在iso中,这样我就需要在U盘中备一个winrar或者imdisk好安装这个后解压缩iso再安装里面的软件。而U盘没有写保护有时候带着exe程序插来插去的容易中毒。

所以现象干脆改成vhd算了。win7也可以加载,win10也可以加载。

我是创建了一个开机批处理,部署后进入到桌面批处理加载vhd,然后调用其中的软件安装器再安装软件和驱动

点评

挂载wim不需盘符,玩diskpart可试list part或list vol,特定vhd可设置特定卷标  详情 回复 发表于 3 天前
回复

使用道具 举报

10#
发表于 4 天前 | 只看该作者
freesoft00 发表于 2024-11-9 22:18
好的多谢!我在windows下面用,无所谓,pecmd也可以,ahk也可以,批处理也可以,只要能达到效果就行。
...



这样的话,用PECMD挂载更快,找盘符也更快更精准,也不用diskpart了,启动太慢。

set^ ForceLocal=1
set^ EnviMode=1
set file0=C:\test\test.vhd
moun-vhd %file0%,,,ret
mstr* * disk,err=<1*>ret
ifex $%err%=0,
{
        part list part %disk%,part0
        sed -ex part0=0,[-\@\=][0-9+]*[ ]*,,part0
        forx *v part0,part,
        {
                part -iv=8 list part %disk%:%part%,drv
                find *<>drv,
                {
                        exec =%drv%\test1.exe
                        exec =%drv%\test2.exe
                        exec =%drv%\test3.exe
                        exec =%drv%\test4.exe
                        exec =%drv%\test5.exe
                        exec =%drv%\test6.exe
                }
        }
}
exit






点评

测试可以  详情 回复 发表于 3 天前

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

11#
 楼主| 发表于 3 天前 | 只看该作者
527104427 发表于 2024-11-9 23:52
这样的话,用PECMD挂载更快,找盘符也更快更精准,也不用diskpart了,启动太慢。

set^ ForceLocal ...

测试可以
回复

使用道具 举报

12#
发表于 3 天前 | 只看该作者
谢谢10楼分享
回复

使用道具 举报

13#
发表于 3 天前 来自手机 | 只看该作者
楼主想的过于复杂了,只需在vhd内建立一个特定名称的文件(夹/路径),然后去遍历就好。

点评

嗯,这样也可以。  详情 回复 发表于 3 天前
回复

使用道具 举报

14#
发表于 3 天前 | 只看该作者
标记以方便后续学习
回复

使用道具 举报

15#
 楼主| 发表于 3 天前 | 只看该作者
hlowld 发表于 2024-11-9 22:34
::获取挂载前的盘符列表
for /f "tokens=1-4" %%a in ('wmic logicaldisk get caption') do (
    set "p ...

代码测试也ok,开始没成功,忘记加变量延迟了,加了后可以了
回复

使用道具 举报

16#
 楼主| 发表于 3 天前 | 只看该作者
nttwqz 发表于 2024-11-10 09:00
楼主想的过于复杂了,只需在vhd内建立一个特定名称的文件(夹/路径),然后去遍历就好。

嗯,这样也可以。
回复

使用道具 举报

17#
发表于 3 天前 来自手机 | 只看该作者
freesoft00 发表于 2024-11-9 23:12
嗯,是有这个问题,但是因为vhd是自己创建的,所以一般是单分区,多分区了自己给自己找麻烦了

一开始 ...

挂载wim不需盘符,玩diskpart可试list part或list vol,特定vhd可设置特定卷标

点评

搜索卷标也是一个办法。 没有选择wim是因为,默认它没有gui窗口,命令行加载没有问题,有时候懒了,在系统中vhd直接在磁盘管理器中挂载不用输入命令了。软件盘有时候会单独用,所以不都是命令行调用所以现在了vhd  详情 回复 发表于 3 天前
回复

使用道具 举报

18#
 楼主| 发表于 3 天前 | 只看该作者
szwp 发表于 2024-11-10 10:12
挂载wim不需盘符,玩diskpart可试list part或list vol,特定vhd可设置特定卷标

搜索卷标也是一个办法。
没有选择wim是因为,默认它没有gui窗口,命令行加载没有问题,有时候懒了,在系统中vhd直接在磁盘管理器中挂载不用输入命令了。软件盘有时候会单独用,所以不都是命令行调用所以现在了vhd

点评

办法太多了,适合自己的自己试  详情 回复 发表于 3 天前
回复

使用道具 举报

19#
发表于 3 天前 | 只看该作者
正常系统?
那费劲什么pecmd代码。。。
1行代码的事。

https://learn.microsoft.com/en-u ... indowsserver2022-ps

Example 3
PowerShell
  1. PS C:\> Mount-VHD -Path c:\test\testvhdx -PassThru | Get-Disk | Get-Partition | Get-Volume
复制代码


Attaches a virtual hard disk to the system where the path to the virtual hard disk file is c:\test\testvhdx.vhdx, and gets the volumes associated with it.

点评

win7和xp能一行ps命令搞成吗? 大佬你貌似歧视pecmd啊,不管白猫黑猫,能逮老鼠就是好猫嘛,不知道为什么要捧一贬一,实在是不懂,搞技术的不都是有容乃大吗?  详情 回复 发表于 3 天前

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

20#
发表于 3 天前 | 只看该作者
来了解下了
回复

使用道具 举报

21#
发表于 3 天前 来自手机 | 只看该作者
freesoft00 发表于 2024-11-10 10:27
搜索卷标也是一个办法。
没有选择wim是因为,默认它没有gui窗口,命令行加载没有问题,有时候懒了,在系 ...

办法太多了,适合自己的自己试
回复

使用道具 举报

22#
发表于 3 天前 | 只看该作者
路过 。。。
回复

使用道具 举报

23#
发表于 3 天前 | 只看该作者
slore 发表于 2024-11-10 14:07
正常系统?
那费劲什么pecmd代码。。。
1行代码的事。

win7和xp能一行ps命令搞成吗?
大佬你貌似歧视pecmd啊,不管白猫黑猫,能逮老鼠就是好猫嘛,不知道为什么要捧一贬一,实在是不懂,搞技术的不都是有容乃大吗?

点评

>win7和xp能一行ps命令搞成吗? xp的时候还没VHD吧,WIN7也许可以吧,都是10年不用的系统了,自己要用的话得测试一下。 powershell也有单独的安装包。 >大佬你貌似歧视pecmd啊 在PE做初始化,写小工具还行  详情 回复 发表于 3 天前
回复

使用道具 举报

24#
发表于 3 天前 | 只看该作者
489432757 发表于 2024-11-10 17:07
win7和xp能一行ps命令搞成吗?
大佬你貌似歧视pecmd啊,不管白猫黑猫,能逮老鼠就是好猫嘛,不知道为什么 ...

>win7和xp能一行ps命令搞成吗?

xp的时候还没VHD吧,WIN7也许可以吧,都是10年不用的系统了,自己要用的话得测试一下。
powershell也有单独的安装包。

>大佬你貌似歧视pecmd啊

在PE做初始化,写小工具还行,正常系统选择多了去了。
pecmd好用么?题主又没限定必须pecmd来做,不是么。

工欲善其事,必先利其器啊。
在适合的场景选择合适的工具。pecmd的代码24行,powershell的代码1行,意思也很明确,
正常系统上不用费劲写pecmd代码,直接用系统自带powershell有什么问题?

没有歧视pecmd,只是觉得它不好用。pecmd的代码编写不费劲么? 事实不能讲么。
这有什么一捧一贬。pecmd都成信仰了么。对我来说不过是个工具,好用工具,不好工具,
方便工具罢了。

点评

ps倒也不是问题,因为我封装的是win10,加载后自动调用。所以ps也不是问题。 并不是xp、win7、win10多种环境,其它的win7单独用我可以单独磁盘管理手动加载。 而xp系统已经好几年没有安装过了,现在大部分起步  详情 回复 发表于 3 天前
了解。 我的信仰是什么,我自己都不清楚。 但我挺好奇的,想知道你此时此刻的心理状态。 技术我方面我是小白,此生也无望成为你一样的大佬,研究技术不行,那就换个方向吧,研究一下大佬们的心理状态  详情 回复 发表于 3 天前
回复

使用道具 举报

25#
发表于 3 天前 | 只看该作者
slore 发表于 2024-11-10 17:42
>win7和xp能一行ps命令搞成吗?

xp的时候还没VHD吧,WIN7也许可以吧,都是10年不用的系统了,自己要用 ...

了解。
我的信仰是什么,我自己都不清楚。
但我挺好奇的,想知道你此时此刻的心理状态。
技术我方面我是小白,此生也无望成为你一样的大佬,研究技术不行,那就换个方向吧,研究一下大佬们的心理状态
回复

使用道具 举报

26#
发表于 3 天前 | 只看该作者
我看了一下,attach vdisk有个NODRIVELETTER参数,可以不分配盘符。

先确定空闲盘符
然后连接虚拟磁盘
选择分区,你自己的虚拟磁盘文件,哪些分区需要分配盘符,可事先确定,不用判断
assign分配你指定的空闲盘符
重复操作分配其它分区盘符

至于7-11是否全部有这个参数,你得自己测试。
回复

使用道具 举报

27#
发表于 3 天前 | 只看该作者
以前也遇到楼主的问题,后来在论坛找到了解决方法,亲测成功的!

大致命令是这样的(懒得改了,批处理中拷贝的一行),主要是为了说明问题:

cmd /c "echo select vdisk file="%a%" & echo attach vdisk & echo sel par 1 & echo assign letter=%ltr_av%" |diskpart.exe

最关键的地方是: 先要 sel par 1 然后再 assign letter

我的vhd是单分区的,没试过多分区的情形

点评

好,应该就是少了一条指令  详情 回复 发表于 3 天前

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

28#
发表于 3 天前 来自手机 | 只看该作者
可以培养不用盘符访问的习惯
回复

使用道具 举报

29#
 楼主| 发表于 3 天前 | 只看该作者
本帖最后由 freesoft00 于 2024-11-10 21:53 编辑
captain_g 发表于 2024-11-10 19:20
以前也遇到楼主的问题,后来在论坛找到了解决方法,亲测成功的!

大致命令是这样的(懒得改了,批处理中 ...

好,应该就是少了一条指令sel par 1

点评

练习lis par,不选择分区分配不了,多看错误信息  详情 回复 发表于 前天 07:42
回复

使用道具 举报

30#
 楼主| 发表于 3 天前 | 只看该作者
slore 发表于 2024-11-10 17:42
>win7和xp能一行ps命令搞成吗?

xp的时候还没VHD吧,WIN7也许可以吧,都是10年不用的系统了,自己要用 ...

ps倒也不是问题,因为我封装的是win10,加载后自动调用。所以ps也不是问题。


并不是xp、win7、win10多种环境,其它的win7单独用我可以单独磁盘管理手动加载。
而xp系统已经好几年没有安装过了,现在大部分起步都是win10了,win7都装的少了
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-13 09:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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