[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助!哪位帮我修改一下这个创建虚拟机磁盘的批处理

比如:文件在"D:\Win8.1_GPT_VHD"目录下  在批处理内直接输入这个路径运行,并且要在第41行指定文件名才能运行,否则会出错!如果直接拖进去就变成"D:\Win8.1_GPT_VHD\Win8.1_GPT_VHD.VHDX"运行就出错!

我的想法是直接把文件拖进去,批处理自动识别文件名。不用再手动输入!
  1. @echo off
  2. :vhdx_path
  3. bcdedit -enum {current}|find /i "vhdx="
  4. if %errorlevel%==0 (set drive=D:) else set drive=C:
  5. color 1f
  6. cls
  7. echo.
  8. echo.请输入已创建父vhdx文件的路径。
  9. echo.
  10. set vhdx_path=
  11. set /p vhdx_path=请输入:
  12. if "%vhdx_path%"=="" goto :vhdx_path
  13. if not "%vhdx_path:~1,2%"==":\" (
  14. color 4f
  15. cls
  16. echo.
  17. echo.路径输入错误。
  18. echo.
  19. set /p t=按回车键重输。
  20. goto :vhdx_path
  21. )
  22. for /f "delims==" %%i in ("%vhdx_path%") do set sys_drive=%%~di
  23. if not exist %sys_drive%\nul (
  24. color 4f
  25. cls
  26. echo.
  27. echo.%sys_drive:~0,1%盘不存在。
  28. echo.
  29. set /p t=按回车键重新输入。
  30. goto :vhdx_path
  31. )
  32. if /i "%vhdx_path:~-4%"==".vhdx" (
  33. for /f "delims==" %%i in ("%vhdx_path%") do set vhdx_name=%%~ni
  34. for /f "delims==" %%i in ("%vhdx_path%") do set sys_folder=%%~pi
  35. ) else (
  36. for /f "delims==" %%i in ("%vhdx_path%") do set vhdx_name=Win7
  37. for /f "delims==" %%i in ("%vhdx_path%") do set sys_folder=%%~pnxi
  38. )
  39. if "%sys_folder:~-1%"=="\" set sys_folder=%sys_folder:~0,-1%
  40. if "%sys_folder%"=="" (
  41. COLOR 4f
  42. cls
  43. echo.
  44. echo.请勿将路径设在分区根目录
  45. echo.
  46. set /p t=按回车键重输。
  47. goto :vhdx_path
  48. )
  49. if not exist "%sys_drive%%sys_folder%\%vhdx_name%.vhdx" (
  50. COLOR 4f
  51. cls
  52. echo.
  53. echo."%sys_drive%%sys_folder%\%vhdx_name%.vhdx"不存在。
  54. echo.
  55. set /p t=按回车键重输。
  56. goto :vhdx_path
  57. )
  58. :sub
  59. color 1f
  60. cls
  61. echo.
  62. echo.输入子vhdx文件的名字。
  63. echo.
  64. set sub_name=
  65. set /p sub_name=请输入:
  66. if "%sub_name%"=="" goto :sub
  67. color 0f
  68. cls
  69. echo.
  70. echo.正在创建子vhdx文件。。。
  71. echo.
  72. echo create vdisk file="%sys_drive%%sys_folder%\%sub_name%.vhdx" parent="%sys_drive%%sys_folder%\%vhdx_name%.vhdx" > "%temp%\create.txt"
  73. diskpart /s "%temp%\create.txt"
  74. color 1f
  75. cls
  76. echo.
  77. echo.已成功创建子vhdx文件。
  78. pause
  79. exit
复制代码

if /i "%vhdx_path:~-4%"==".vhdx" (
这一句凭感觉就不对.
if /i "%vhdx_path:~-5,5%"==".vhdx" (
没测试代码,代码的可读性较差。而且win7不能写在vhdx中,只能写在vhd中,不然不能启动。
因此可能应为
if /i "%vhdx_path:~-4%"==".vhd" (
你也没说清楚你要达到的目的和结果。

TOP

本帖最后由 samsung4203 于 2014-12-24 22:22 编辑

回复 2# yiwuyun
VHDX和VHD适用于win8和Win8.1以上的系统,VHD只能用于Win7,所以Win8.1用VHDX是没问题的,这段代码只是无法识别鼠标拖入文件的的完整路径。
我的VHDX文件完整路径是"D:\Win8.1_GPT_VHD\Win8.1_GPT_VHD.vhdx",如果用鼠标拖进批处理回车会显示错误,只能手动输入或鼠标拖入"D:\Win8.1_GPT_VHD"路径运行才可以,并且第41行的代码"for /f "delims==" %%i in ("%vhdx_path%") do set vhdx_name=Win7", 【=Win7】必须指定对应的文件名才可以运行不出错。

TOP

返回列表