无忧启动论坛

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

求一个自动创建子vhd的批处理 谢谢

[复制链接]
跳转到指定楼层
1#
发表于 2019-11-28 15:14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 879792799 于 2023-3-6 12:31 编辑

求如下效果
拖动一个VHD文件到此批处理上
自动创建一个文件名*_child.vhd{vhdx}的{子vhd文件}====={*代表父VHD名称}

求大大指点一下 谢谢

--------------------------------------------------------------------------------------
补充一::::本人在用的成品----食用方法@修改批处理中路径--运行批处理生成vhd右键菜单--在vhd上点击右键
依照10#singel大大指点 !谢谢singel大大!!!! 还有另外一位大大--sorry我忘记是谁了 也谢谢了!!
我也依葫芦画瓢 拼凑一个  非原创  自己拼凑 感觉不错  供大大们参考一下
可以在线VHD制作{在多级vhd系统中 当前正在用的子VHD不可以 但是上一级的vhd可以创建}子vhd系统   
注意更改批处理中对应文件路径
------------------------------------------------------------------------------------
@echo off
if "%1"=="" goto :reg

echo off
color 1f

:vhd_path
bcdedit -enum {current}|find /i "vhd="
if %errorlevel%==0 (set drive=D:) else set drive=C:

color 1f
cls
echo.
echo.请输入已创建父VHD文件的路径。
echo.
set vhd_path=%1
if "%vhd_path%"=="" goto :vhd_path
if not "%vhd_path:~1,2%"==":\" (
color 4f
cls
echo.
echo.路径输入错误。
echo.
set /p t=按回车键重输。
goto :vhd_path
)

for /f "delims==" %%i in ("%vhd_path%") do set sys_drive=%%~di

if not exist %sys_drive%\nul (
color 4f
cls
echo.
echo.%sys_drive:~0,1%盘不存在。
echo.
set /p t=按回车键重新输入。
goto :vhd_path
)

if /i "%vhd_path:~-4%"==".vhd" (
for /f "delims==" %%i in ("%vhd_path%") do set vhd_name=%%~ni
for /f "delims==" %%i in ("%vhd_path%") do set sys_folder=%%~pi
) else (
for /f "delims==" %%i in ("%vhd_path%") do set vhd_name=Win7
for /f "delims==" %%i in ("%vhd_path%") do set sys_folder=%%~pnxi
)

if "%sys_folder:~-1%"=="\" set sys_folder=%sys_folder:~0,-1%

if "%sys_folder%"=="" (
COLOR 4f
cls
echo.
echo.请勿将路径设在分区根目录
echo.
set /p t=按回车键重输。
goto :vhd_path
)

if not exist "%sys_drive%%sys_folder%\%vhd_name%.vhd" (
COLOR 4f
cls
echo.
echo."%sys_drive%%sys_folder%\%vhd_name%.vhd"不存在。
echo.
set /p t=按回车键重输。
goto :vhd_path
)

:sub

color 1f
cls
echo.
echo.输入子VHD文件的名字。
echo.
set sub_name=
set /p sub_name=请输入:
if "%sub_name%"=="" goto :sub

color 0f
cls
echo.
echo.正在创建子VHD文件。。。
echo.

echo create vdisk file="%sys_drive%%sys_folder%\%sub_name%.vhd" parent="%sys_drive%%sys_folder%\%vhd_name%.vhd" > "%temp%\create.txt"
diskpart /s "%temp%\create.txt"

color 1f
cls
echo.
echo.已成功创建子VHD文件。
pause

exit
goto eof

:reg
reg add "HKCR\Windows.VhdFile\shell\vparent" /f /ve /t REG_SZ /d "建立差分VHD"
reg add "HKCR\Windows.VhdFile\shell\vparent\command" /f /ve /t REG_SZ /d "E:\创建子VHD.bat %%1"

goto eof
-----------------------------------------------------------------------------------
红字部分需要依照自己需要更改对应路径



===================================================================









2#
发表于 2019-11-28 15:47:15 | 只看该作者
*又代表什么

点评

呵呵 怪我说明白 是父文件名  发表于 2019-11-28 20:24
回复

使用道具 举报

3#
发表于 2019-11-28 16:48:46 | 只看该作者
本帖最后由 kkkssc 于 2019-11-28 16:54 编辑

cmd /c "echo create vdisk file=C:\*_child.vhd maximum=2048 type=FIXED & echo select vdisk file=C:\*_child.vhd & echo attach vdisk & echo create partition primary & echo active & echo assign letter=VHD2G & echo format fs=NTFS quick label=VHD2G & echo exit"|diskpart.exe



要用管理员身份运行,上面的参数自己改

点评

多谢大大 我去试一下  详情 回复 发表于 2019-11-28 20:26

评分

参与人数 1无忧币 +5 收起 理由
879792799 + 5 赞一个!

查看全部评分

回复

使用道具 举报

4#
发表于 2019-11-28 18:27:01 | 只看该作者
;Windows cmd批处理脚本,一键创建/挂载/格式化/分离,VHD虚拟硬盘
@echo off
;Cacls.exe命令
;这是一个在Windows 2000/XP/Server 2003操作系统下都可以使用的命令,作用是显示或者修改文件的访问控制表,在命令中可以使用通配符指定多个文件,也可以在命令中指定多个用户。
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
if exist %tmp%\vhdconf (del /f /q %tmp%\vhdconf)
title Www.ZhiQiang.Name
mode con: cols=45 lines=10
color 2F
pushd "%~dp0"
for /f "delims=" %%i in ('dir /b %~dp0^|findstr ".*\.vhd"') do (set name=%%i)
:menu
cls
echo.
echo 1.挂载 %name%
echo.
echo 2.分离 %name%
echo.
echo 3.创建 VHD
echo.
echo 4.格式化 %name%
echo.
choice /C:1234 /N /M "请输入你的选择[1,2,3,4]":
if errorlevel 4 goto:vhdformat
if errorlevel 3 goto:vhdadd
if errorlevel 2 goto:vhdoff
if errorlevel 1 goto:vhdon
:vhdon
echo SELECT VDISK FILE= "%~dp0%name%" >%tmp%\vhdconf
echo ATTACH VDISK NOERR >>%tmp%\vhdconf
echo LIST DISK >>%tmp%\vhdconf
DISKPART /s %tmp%\vhdconf > nul
exit
:vhdoff
echo SELECT VDISK FILE= "%~dp0%name%" >%tmp%\vhdconf
echo ATTACH VDISK NOERR >>%tmp%\vhdconf
echo DETACH VDISK >>%tmp%\vhdconf
echo LIST DISK >>%tmp%\vhdconf
DISKPART /s %tmp%\vhdconf > nul
exit
:vhdadd
cls
echo.
echo 自定义vhd虚拟硬盘文件名称与大小,按回车
echo.
set /p newname=文件名:
echo.
set /p value=大小(G):
set /a mx = (value)*(1024)
echo CREATE VDISK FILE="%~dp0%newname%.vhd" TYPE=FIXED MAXIMUM=%mx% >>%tmp%\vhdconf
echo SELECT VDISK FILE="%~dp0%newname%.vhd" >>%tmp%\vhdconf
echo ATTACH VDISK NOERR >>%tmp%\vhdconf
echo CLEAN >>%tmp%\vhdconf
echo CREATE PARTITION PRIMARY >>%tmp%\vhdconf
echo FORMAT FS=NTFS QUICK >>%tmp%\vhdconf
echo ASSIGN >>%tmp%\vhdconf
DISKPART /s %tmp%\vhdconf > nul
exit
:vhdformat
echo SELECT VDISK FILE="%~dp0%name%" >>%tmp%\vhdconf
echo ATTACH VDISK NOERR >>%tmp%\vhdconf
echo CLEAN >>%tmp%\vhdconf
echo CREATE PARTITION PRIMARY >>%tmp%\vhdconf
echo FORMAT FS=NTFS QUICK >>%tmp%\vhdconf
echo ASSIGN >>%tmp%\vhdconf
DISKPART /s %tmp%\vhdconf > nul
exit

                             

点评

功能好多啊 关键是哪个创建子VHD啊 大大  发表于 2019-11-28 20:26
回复

使用道具 举报

5#
 楼主| 发表于 2019-11-28 20:26:50 | 只看该作者
kkkssc 发表于 2019-11-28 16:48
cmd /c "echo create vdisk file=C:\*_child.vhd maximum=2048 type=FIXED & echo select vdisk file=C:\*_ ...

多谢大大 我去试一下
回复

使用道具 举报

6#
发表于 2019-11-29 09:35:00 | 只看该作者
好东西,支持
回复

使用道具 举报

7#
发表于 2019-12-5 10:49:55 | 只看该作者
唉!!!!!!!!!
回复

使用道具 举报

8#
发表于 2019-12-5 10:49:59 | 只看该作者
唉!!!!!!!!!

点评

咋了??是不是哪里不对 请指点指点!!  详情 回复 发表于 2019-12-5 13:23
回复

使用道具 举报

9#
 楼主| 发表于 2019-12-5 13:23:38 | 只看该作者
ngy 发表于 2019-12-5 10:49
唉!!!!!!!!!

咋了??是不是哪里不对 请指点指点!!
回复

使用道具 举报

10#
发表于 2019-12-10 04:40:34 | 只看该作者
  1. @echo off
  2. if "%1"=="" goto :reg

  3. set vhd_file=%1
  4. if exist "%temp%\attach.txt" del "%temp%\attach.txt"

  5. echo select vdisk file="%vhd_file%">"%temp%\attach.txt"
  6. echo compact vdisk>>"%temp%\attach.txt"
  7. echo create vdisk file="%vhd_file:win=win_1%" parent="%vhd_file%">>"%temp%\attach.txt"
  8. diskpart /s "%temp%\attach.txt"
  9. del "%temp%\attach.txt"
  10. goto eof

  11. :reg
  12. reg add "HKCR\Windows.VhdFile\shell\vparent" /f /ve /t REG_SZ /d "建立差分VHD"
  13. reg add "HKCR\Windows.VhdFile\shell\vparent\command" /f /ve /t REG_SZ /d "D:\VHDTest\vparent.cmd %%1"
  14. goto eof
复制代码

点评

谢谢大大 我用的过程中 出现百分比的cmd窗口 过一会一闪关闭了 没有找到建立的子文件 什么原因了??大大  详情 回复 发表于 2019-12-10 10:12

评分

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

查看全部评分

回复

使用道具 举报

11#
 楼主| 发表于 2019-12-10 10:12:34 | 只看该作者
本帖最后由 879792799 于 2019-12-10 10:19 编辑

谢谢大大  我用的过程中 出现百分比的cmd窗口 过一会一闪关闭了  没有找到建立的子文件  
什么原因了??大大
补充一 :大大 是不是要排除正在使用用VHD文件  我试了另外一个离线的VHD可以成功 !!!

点评

确实是,正在使用的不行。  详情 回复 发表于 2019-12-13 17:42
回复

使用道具 举报

12#
发表于 2019-12-13 17:42:51 | 只看该作者
879792799 发表于 2019-12-10 10:12
谢谢大大  我用的过程中 出现百分比的cmd窗口 过一会一闪关闭了  没有找到建立的子文件  
什么原因了? ...

确实是,正在使用的不行。

评分

参与人数 1无忧币 +5 收起 理由
879792799 + 5 赞一个!

查看全部评分

回复

使用道具 举报

13#
发表于 2023-5-16 23:25:19 | 只看该作者
学习了
回复

使用道具 举报

14#
发表于 2024-7-2 01:33:45 | 只看该作者
上次看到某个大神好像实现了Diskpart的功能
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-15 09:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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