标题: [其他] [已解决]用批处理完成右键加载VHD文件的另类方法 [打印本页]
作者: 大地 时间: 2024-6-21 09:12 标题: [已解决]用批处理完成右键加载VHD文件的另类方法
本帖最后由 大地 于 2024-7-9 19:35 编辑
[已解决]用批处理完成右键加载VHD文件的另类方法
不用批处理文件名,不用路径
直接在注册表中输入如下就可:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\KLoadvhd1]
@="右键加载VHD √"
[HKEY_CLASSES_ROOT\*\shell\KLoadvhd1\command]
@="cmd.exe /c (echo Select vdisk file=%1 && echo attach vdisk && echo select partition 1 && echo assign letter=) | diskpart"
[HKEY_CLASSES_ROOT\*\shell\LKillvhd1]
@="右键卸载VHD ×"
[HKEY_CLASSES_ROOT\*\shell\LKillvhd1\command]
@="cmd.exe /c (echo Select vdisk file=%1 && echo detach vdisk) | diskpart"
=========================================================================
谢谢大佬!!
首选是大佬的功劳,谢谢大佬
现在把它重新整理一下,以作备用。
=========================================================================
① reg文件:(成功的右键菜单)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\KLoadvhd1]
@="右键加载VHD √"
"Icon"="C:\\PET00LSS\\Allother\\RightMenu\\disk131.ico"
[HKEY_CLASSES_ROOT\*\shell\KLoadvhd1\command]
@="\"C:\\PET00LSS\\Allother\\RightMenu\\RightLoadVHD.bat\" %1"
[HKEY_CLASSES_ROOT\*\shell\LKillvhd1]
@="右键卸载VHD ×"
"Icon"="C:\\PET00LSS\\Allother\\RightMenu\\disk131.ico"
[HKEY_CLASSES_ROOT\*\shell\LKillvhd1\command]
@="\"C:\\PET00LSS\\Allother\\RightMenu\\RightkillVHD.bat\" %1
==========================================================================
② 右键加载VHD, RightLoadVHD.bat
@echo off
@echo off
color 2f
cls
mode con:cols=70 lines=40
cls
set "_comline_= echo Select vdisk file=%1 & echo attach vdisk & echo select partition 1 & echo assign letter=Y"
(%_comline_%) | diskpart
exit /b
=========================================================================
③ 右键卸载VHD,RightkillVHD.bat
@echo off
color 2f
cls
mode con:cols=70 lines=40
cls
set "_comline_= echo Select vdisk file=%1 & 以echo detach vdisk"
(%_comline_%) | diskpart
exit /b
=========================================================================
④
以下是自动批处理加载卸载加载卸载加载卸载
批处理一键加载及卸载VHD.bat
@echo off
@echo off
color 2f
cls
mode con:cols=70 lines=40
cls
:ne1是退出卸载VHD
::one2是加载VHD,反复点击本批处理,是加载退出加载退出...
::把本批处理放在与VHD文件同一目录下
cd /d %~dp0
if exist "Y:\" goto one1
if not exist "Y:\" goto one2
:one1
@echo off
for /f "tokens=*" %%i in ('dir /s /b *.vhd') do (
echo %%i
Set file="%%i"
)
set "_comline_= echo Select vdisk file=%file% & echo detach vdisk"
(%_comline_%) | diskpart
exit /b
:one2
@echo off
for /f "tokens=*" %%i in ('dir /s /b *.vhd') do (
echo %%i
Set file="%%i"
)
set "_comline_= echo Select vdisk file=%file% & echo attach vdisk & echo select partition 1 & echo assign letter=Y"
(%_comline_%) | diskpart
exit /b
===============================================================
⑤
需要更多的要求参照以下7楼、8楼、10楼等多位大佬的优秀代码去研发拓展
我也是在不断向他们学习中.........
再次谢谢大佬们!
.....................
====================================================================
思路:
在任意文件夹中任意文件名的VHD文件
①A.bat内容:- cd /d %~dp0
- dir /b *.vhd>111.txt
复制代码
在111.txt中获取VHD的文件名
②B.bat内容:- @echo off
- echo %CD%>222.txt
复制代码
在222.txt中获取VHD的文件所在完整路径
③renvol.txt内容:- Select vdisk file="C:\VHD\TooL.VHD"
- attach vdisk
- select partition 1
- assign letter=Y
- exit
复制代码
④变更
把renvol.txt中的TooL.VHD文件名替换成上面111.txt中获取的VHD文件名
把renvol.txt中的 C:\VHD 路径替换成上面222.txt中获取的VHD文件完整路径名
⑤加载VHD- @echo off
- diskpart /s renvol.txt
- exit
复制代码
请大佬能不能把上面的语句合并成一个单个的批处理文件名,这样我就能制作右键菜单了(只要把批处理转成EXE就行了)
缺陷:A:如果文件夹中存在多个VHD怎么办,最好是鼠标点击的VHD文件生成它对应的文件名及它的完整路径
B:我是指定生成的Y盘,如果已存在Y盘 不知该怎么处理了,啊。
C:不知道这个右键思路可行吗?
作者: newswan 时间: 2024-6-21 20:06
- @echo off
-
- set "_comline_= echo Select vdisk file=%1 & echo attach vdisk & echo select partition 1 & echo assign letter=Y"
- (%_comline_%) | diskpart
复制代码
作者: czjt1234 时间: 2024-6-21 21:13
回复 2# newswan
厉害了,我就没看懂楼主要做什么
作者: newswan 时间: 2024-6-21 22:13
回复 3# czjt1234
经常有看不懂的题目
作者: 大地 时间: 2024-6-21 22:38
本帖最后由 大地 于 2024-6-21 22:40 编辑
回复 2# newswan
@echo off
set "_comline_= echo Select vdisk file="D:\VHD\TooLs.VHD" & echo attach vdisk & echo select partition 1 & echo assign letter=Y"
(%_comline_%) | diskpart
谢谢大佬 上面命令是成功的,但因D:\VHD\TooLs.VHD名称的不确定性及路径地址的不确定性,我改成了下面还是不行,哪里搞错了,请大佬再修改一下,谢谢
for /f "tokens=*" %%i in ('dir /s /b *.vhd') do (
echo %%i
set "_comline_= echo Select vdisk file="%%i" & echo attach vdisk & echo select partition 1 & echo assign letter=Y"
(%_comline_%) | diskpart
)
exit /b
((主要把本批处理命令文件放在VHD旁边 ,直接点击批处理就能加载VHD文件,不需要其它软件或管理工具中去挂载了))
作者: Five66 时间: 2024-6-21 23:26
将2楼代码保存为bat
然后直接添加右键的注册表就行了
(注册表中带上参数调用上面的bat,bat中%1会自动变成路径地址,路径中的空格跟特殊字符自己自行处理)
作者: newswan 时间: 2024-6-21 23:28
本帖最后由 newswan 于 2024-6-21 23:33 编辑
- for /f "tokens=*" %%i in ('dir /s /b *.vhd') do (
- echo %%i
- Set file="%%i"
- )
-
- set "_comline_= echo Select vdisk file=%file% & echo attach vdisk & echo select partition 1 & echo assign letter=Y"
- (%_comline_%) | diskpart
复制代码
作者: ppll2030 时间: 2024-6-21 23:52
回复 5# 大地
改成这样试试。
不过如果同级目录或子目录下有多个vhd,这命令会一次性全部加载。- @echo off
- for /f "delims=" %%i in ('dir /s /b *.vhd') do (call :vhd "%%i")
- exit
-
- :vhd
- set "_comline_= echo Select vdisk file="%~1" & echo attach vdisk & echo select partition 1 & echo assign letter=Y"
- (%_comline_%) | diskpart
复制代码
作者: 大地 时间: 2024-6-22 08:10
回复 8# ppll2030
因为挂载的盘符已经定位在Y盘,所以无法同时挂载多个VHD,只是测试好像挂载最后一个VHD。 要同时挂载多个VHD,可能还得设个变量。
作者: aloha20200628 时间: 2024-6-22 11:17
本帖最后由 aloha20200628 于 2024-6-22 11:35 编辑
回复 1# 大地
给一个多对策版本...
一》用 yzxwvuts... 逆序适配第一个空盘符
二》若命令行指定或直接拖入一个挂载文件给本批,则跳转[main]处理完成
三》否则搜索当前目录(包含子目录)中全部*.vhd文件,若发现多个(>1)则须指定其中一个序号确认,若未发现任何挂载文件则直接退出本批
四》如需删除renvol.txt,抹去代码第18行首 REM 关键字即可
- @echo off &setlocal enabledelayedexpansion
- set "d=yzxwvutsrqponmlkjihgfed"
- :[next]
- if exist "!d:~,1!:\" (set "d=!d:~1!" & goto[next])
- set "_d=!d:~,1!"&set/a "n=0,k=1"
- if exist "%~1" (set "_1=%~1" & goto[main])
- for /r %%F in (*.vhd) do (set/a "n+=1"&set "_!n!=%%F")
- if !n! gtr 1 (
- for /L %%k in (1,1,!n!) do echo,%%k: !_%%k!
- set/p "k=用行首序号指定一个挂载文件:"
- ) else if !n! equ 0 (endlocal&exit/b)
- :[main]
- echo,Select vdisk file="!_%k%!">"renvol.txt"
- (for %%s in (
- "attach vdisk", "select partition 1", "assign letter=!_d!", "exit") do (echo,%%~s)
- )>>"renvol.txt"
- diskpart /s "renvol.txt"
- REM del /q "renvol.txt"
- endlocal&pause&exit/b
复制代码
作者: 大地 时间: 2024-6-22 14:01
回复 10# aloha20200628
谢谢大神,语句代码有点深奥,慢慢去学习。
作者: newswan 时间: 2024-6-22 15:23
如果完整设计一下,多个 vhd ,一个 vhd 中 多个分区,分区有 efi msr ntfs ,哪些要分配盘符,盘符怎么分配?
作者: ppll2030 时间: 2024-6-22 17:41
回复 9# 大地
你试一下就知道了。Y被占用了。也会自动分配的
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |