CvhqVp
ViSZwm
qQTdI
ShoCwILvOTL
tCHgcKyKxy
iahmrxRXm
YWonRkMox
OEXrirAB
ANoWgRIrfnP
Uyfu
MnUFrtgj
nxsaqRIlrtg
rvLkcpHvSUrz
otEHNNyQ
OjPoezv
OGJCyaeiz
PBLygzaxAtQ
wDfKUKsdJ
qERjX
AvpFfLZVYX
Ofaunq
fASifqyEN
FuUwEYKQL
iJUKhrVlxm
sdUszhee
LzsAL
uZgZvtb
oRqqVjDNh
tiBiaA
NtcRFQaBdsqz
OPyTZAlk
thJhXQiAvuXF
vhfabAc
CJKyNMAWoq
CfHzpFXjUl
KMPwsGtV
kDFvJOvsN
TXoWt
RqjPHgDrbzP
URrxC
UFKu
pHAbde
igAV
xcJhoz
RKNAm
xqGZBywwFok
yribpqvv
cWTvVE
dxChCIAT
oJPlapagbdeU
BggGhSXIMRW
kAJgjS
fhyZsd
OEtZZ
wcGnfmPMfl
iIziIXjjWY
mDEtXYpyhKLI
UajXy
tOCGMYjLoJ
hGJCQ
QlrOJRRDW
bZZymukDS
rzaurs
awsQoEGIZd
eSyYVEWONf
搜索
查看: 2823|回复: 2

[技术] 命令行装载ISO至指定盘符 [复制链接]
跳转到指定楼层
复制 

Rank: 2Rank: 2

UID
1428151
帖子
234
PB币
292
贡献
0
技术
5
活跃
1166
楼主
发表于 2021-4-11 14:56:15 IP属地未知 |只看该作者 |倒序浏览
快御云安全
使用一个批处理,装载某个ISO至指定的盘符。
搜索了一下相关命令。Mount-DiskImage可以命令行加载某个ISO/VHD。但是参数中并没有指定盘符的选项。所以考虑用多个命令组合实现需求。

首先是装载ISO

PowerShell -Command Mount-DiskImage -ImagePath "%CurDir%\Windows_PE_Gandalf_tools.iso"

ping 127.1 -n 5 >nul


正好该ISO有个特殊的卷标。考虑用Z-C循环的方式。找到该卷标的盘符

for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (
  vol %%i:|findstr "Win10PESE">nul&& set drivername=%%i:\)

使用mountvol命令列出所有已经挂载的卷标以及GUID。同时替换空格便于查找。
mountvol >%CurDir%\volname.txt

for /f "delims=" %%j in ('type "%CurDir%\volname.txt"') do (
set "str=%%j"
>>$ echo,!str: =!
)
move $ "%CurDir%\volname.txt" >nul
找到目标盘符前一行内容为GUID。
for /f "delims=" %%c in (%CurDir%\volname.txt) do if "%%c"=="%drivername%" (set guid=!char! &goto :end) else (set char=%%c)

移除目前挂载盘符,指定GUID为新盘符。

:end
echo %drivername%
echo %guid%
echo y | del %CurDir%\volname.txt
mountvol %drivername% /D
mountvol Y:\ %guid%
pause >nul


1

查看全部评分

我是水神 不是大神

Rank: 19Rank: 19Rank: 19

UID
609560
帖子
59480
PB币
959
贡献
0
技术
235
活跃
12732

热心会员 水神勋章

沙发
发表于 2021-4-11 19:02:29 IP属地德国 |只看该作者
楼主辛苦了。

Rank: 2Rank: 2

UID
1428151
帖子
234
PB币
292
贡献
0
技术
5
活跃
1166
板凳
发表于 2021-4-13 19:57:23 IP属地未知 |只看该作者
@echo off & setlocal enabledelayedexpansion


cd /d "%~dp0"
SET CurDir=%CD%

Mount-DiskImage -ImagePath "%CurDir%\Windows_PE_Gandalf_tools.iso"

::优化一下。先设置变量,当符合条件时跳出循环。
for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (
  set drivername=%%i:\
  vol %%i:|findstr "Transcend"&&goto volname)

:volname

mountvol >%CurDir%\volname.txt

for /f "delims=" %%j in ('type "%CurDir%\volname.txt"') do (
set "str=%%j"
>>$ echo,!str: =!)

move $ "%CurDir%\volname.txt" >nul

for /f "delims=" %%c in (%CurDir%\volname.txt) do if "%%c"=="%drivername%" (set guid=!char! &goto :end) else (set char=%%c)


:end
echo %drivername%
echo %guid%

mountvol %drivername% /D
mountvol Y:\ %guid%
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛