标题: [文本处理] 求助!哪位帮我修改一下这个创建虚拟机磁盘的批处理 [打印本页]
作者: samsung4203 时间: 2014-12-21 13:18 标题: 求助!哪位帮我修改一下这个创建虚拟机磁盘的批处理
比如:文件在"D:\Win8.1_GPT_VHD"目录下 在批处理内直接输入这个路径运行,并且要在第41行指定文件名才能运行,否则会出错!如果直接拖进去就变成"D:\Win8.1_GPT_VHD\Win8.1_GPT_VHD.VHDX"运行就出错!
我的想法是直接把文件拖进去,批处理自动识别文件名。不用再手动输入!- @echo off
-
- :vhdx_path
- bcdedit -enum {current}|find /i "vhdx="
- if %errorlevel%==0 (set drive=D:) else set drive=C:
-
- color 1f
- cls
- echo.
- echo.请输入已创建父vhdx文件的路径。
- echo.
- set vhdx_path=
- set /p vhdx_path=请输入:
- if "%vhdx_path%"=="" goto :vhdx_path
- if not "%vhdx_path:~1,2%"==":\" (
- color 4f
- cls
- echo.
- echo.路径输入错误。
- echo.
- set /p t=按回车键重输。
- goto :vhdx_path
- )
-
- for /f "delims==" %%i in ("%vhdx_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 :vhdx_path
- )
-
- if /i "%vhdx_path:~-4%"==".vhdx" (
- for /f "delims==" %%i in ("%vhdx_path%") do set vhdx_name=%%~ni
- for /f "delims==" %%i in ("%vhdx_path%") do set sys_folder=%%~pi
- ) else (
- for /f "delims==" %%i in ("%vhdx_path%") do set vhdx_name=Win7
- for /f "delims==" %%i in ("%vhdx_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 :vhdx_path
- )
-
- if not exist "%sys_drive%%sys_folder%\%vhdx_name%.vhdx" (
- COLOR 4f
- cls
- echo.
- echo."%sys_drive%%sys_folder%\%vhdx_name%.vhdx"不存在。
- echo.
- set /p t=按回车键重输。
- goto :vhdx_path
- )
-
- :sub
-
- color 1f
- cls
- echo.
- echo.输入子vhdx文件的名字。
- echo.
- set sub_name=
- set /p sub_name=请输入:
- if "%sub_name%"=="" goto :sub
-
- color 0f
- cls
- echo.
- echo.正在创建子vhdx文件。。。
- echo.
-
- echo create vdisk file="%sys_drive%%sys_folder%\%sub_name%.vhdx" parent="%sys_drive%%sys_folder%\%vhdx_name%.vhdx" > "%temp%\create.txt"
- diskpart /s "%temp%\create.txt"
-
- color 1f
- cls
- echo.
- echo.已成功创建子vhdx文件。
- pause
-
- exit
复制代码
作者: yiwuyun 时间: 2014-12-22 20:53
if /i "%vhdx_path:~-4%"==".vhdx" (
这一句凭感觉就不对.
if /i "%vhdx_path:~-5,5%"==".vhdx" (
没测试代码,代码的可读性较差。而且win7不能写在vhdx中,只能写在vhd中,不然不能启动。
因此可能应为
if /i "%vhdx_path:~-4%"==".vhd" (
你也没说清楚你要达到的目的和结果。
作者: samsung4203 时间: 2014-12-24 22:16
本帖最后由 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】必须指定对应的文件名才可以运行不出错。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |