Board logo

标题: [分享] 纯DOS下实现全自动分区 [打印本页]

作者: chishingchan     时间: 2009-10-25 23:26    标题: [分享] 纯DOS下实现全自动分区

环境:
MSDOS 7.1 + 4DOS Shell

工具:
count.com
nset.com
gdisk.exe

英文翻译:谷歌语言

源码:
CODE:  [Copy to clipboard]
@echo off
cls
echo.
echo WARNING: This program will erase all data on hard drive.
echo.
echo          Back up your hard drive data before continuing!
echo.
echo          Continue?
echo.
nset /u yn=$1
cls
if "%yn%" eq "YES" .or. "%yn%" eq "Y" goto checkdisk
goto end

:checkdisk
if "%Num%"=="" set Num=3
gdisk|nset.com /l%Num% HD=$1
count Num -
if "%HD%"=="" goto checkdisk
if "%HD%"=="No" count Num -
if %Num% eq 0 goto end
if %Num% eq 1 goto size
cls
echo.
if %Num% gt 1 echo Please enter the code in a hard disk: [1-%Num%]
echo.
nset /u in=$1
if "%in%" eq "" .or. "%in%" eq "0" goto end
if %in% lt 1 .or. %in% gt %Num% goto checkdisk

:size
echo.
if "%in%" == "" set in=1
gdisk %in%|nset.com /s. /l2 Mbytes=$6
if %Mbytes% ge 300000 goto PT1
if %Mbytes% ge 150000 goto PT2
if %Mbytes% ge 90000 goto PT3
if %Mbytes% ge 38000 goto PT4
if %Mbytes% ge 19000 goto PT5
if %Mbytes% ge 7000 goto PT6
if %Mbytes% ge 3800 goto PT7
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /for /q /y /v:START>nul
gdisk %in% /act /p:1 /y>nul
goto end

:PT1
set START=8184
set SYSTEM=16368
set BACKUP=8184
count BACKUP +20
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /y>nul
gdisk %in% /cre /ext /y>nul
gdisk %in% /cre /log /sz:%SYSTEM% /y>nul
gdisk %in% /cre /log /sz:%BACKUP% /y>nul
count Mbytes -%START%
count Mbytes -%SYSTEM%
count Mbytes -%BACKUP%
gdisk %in% /cre /log /sz:33p /y>nul
gdisk %in%|nset.com /s. /l6 DATA=$6
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /for /q /y /v:START>nul
count Mbytes -%START%
gdisk %in% /act /p:1 /y>nul
gdisk %in% /cre /ext /y>nul
gdisk %in% /cre /log /sz:%SYSTEM% /for /q /y /v:SYSTEM>nul
gdisk %in% /cre /log /sz:%DATA% /for /q /y /v:DATA>nul
gdisk %in% /cre /log /sz:%DATA% /for /q /y /v:MEDIA>nul
gdisk %in% /cre /log /sz:%DATA% /for /q /y /v:GAMES>nul
gdisk %in% /cre /log /for /q /y /v:BACKUP /r>nul
goto end

:PT2
set START=8184
set SYSTEM=16368
set BACKUP=4092
count BACKUP +20
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /y>nul
gdisk %in% /cre /ext /y>nul
gdisk %in% /cre /log /sz:%SYSTEM% /y>nul
gdisk %in% /cre /log /sz:%BACKUP% /y>nul
count Mbytes -%START%
count Mbytes -%SYSTEM%
count Mbytes -%BACKUP%
gdisk %in% /cre /log /sz:33p /y>nul
gdisk %in%|nset.com /s. /l6 DATA=$6
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /for /q /y /v:START>nul
count Mbytes -%START%
gdisk %in% /act /p:1 /y>nul
gdisk %in% /cre /ext /y>nul
gdisk %in% /cre /log /sz:%SYSTEM% /for /q /y /v:SYSTEM>nul
gdisk %in% /cre /log /sz:%DATA% /for /q /y /v:DATA>nul
gdisk %in% /cre /log /sz:%DATA% /for /q /y /v:MEDIA>nul
gdisk %in% /cre /log /sz:%DATA% /for /q /y /v:GAMES>nul
gdisk %in% /cre /log /for /q /y /v:BACKUP /r>nul
goto end

:PT3
set START=8184
set SYSTEM=16368
set BACKUP=4092
count BACKUP +20
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /y>nul
gdisk %in% /cre /ext /y>nul
gdisk %in% /cre /log /sz:%SYSTEM% /y>nul
gdisk %in% /cre /log /sz:%BACKUP% /y>nul
count Mbytes -%START%
count Mbytes -%SYSTEM%
count Mbytes -%BACKUP%
gdisk %in% /cre /log /sz:50p /y>nul
gdisk %in%|nset.com /s. /l6 DATA=$6
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /for /q /y /v:START>nul
count Mbytes -%START%
gdisk %in% /act /p:1 /y>nul
gdisk %in% /cre /ext /y>nul
gdisk %in% /cre /log /sz:%SYSTEM% /for /q /y /v:SYSTEM>nul
gdisk %in% /cre /log /sz:%DATA% /for /q /y /v:DATA>nul
gdisk %in% /cre /log /sz:%DATA% /for /q /y /v:GAMES>nul
gdisk %in% /cre /log /for /q /y /v:BACKUP /r>nul
goto end

:PT4
set START=8184
set SYSTEM=8184
set BACKUP=4092
count BACKUP +20
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /for /q /y /v:START>nul
count Mbytes -%START%
gdisk %in% /act /p:1 /y>nul
gdisk %in% /cre /ext /y>nul
gdisk %in% /cre /log /sz:%SYSTEM% /for /q /y /v:SYSTEM>nul
count Mbytes -%SYSTEM%
count Mbytes -%BACKUP%
gdisk %in% /cre /log /sz:%Mbytes% /for /q /y /v:DATA>nul
gdisk %in% /cre /log /for /q /y /v:BACKUP /r>nul
goto end

:PT5
set START=2046
set SYSTEM=8184
set BACKUP=4092
count BACKUP +20
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /for /q /y /v:START>nul
count Mbytes -%START%
gdisk %in% /act /p:1 /y>nul
gdisk %in% /cre /ext /y>nul
gdisk %in% /cre /log /sz:%SYSTEM% /for /q /y /v:SYSTEM>nul
count Mbytes -%SYSTEM%
count Mbytes -%BACKUP%
gdisk %in% /cre /log /sz:%Mbytes% /for /q /y /v:DATA>nul
gdisk %in% /cre /log /for /q /y /v:BACKUP /r>nul
goto end

:PT6
set START=1023
set BACKUP=2046
count BACKUP +20
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /for /q /y /v:START>nul
count Mbytes -%START%
gdisk %in% /act /p:1 /y>nul
gdisk %in% /cre /ext /y>nul
count Mbytes -%BACKUP%
gdisk %in% /cre /log /sz:%Mbytes% /for /q /y /v:SYSTEM>nul
gdisk %in% /cre /log /for /q /y /v:BACKUP /r>nul
goto end

:PT7
set START=1023
set BACKUP=1023
count BACKUP +20
gdisk %in%|nset.com /s. /l2 Mbytes=$6
gdisk %in% /del /all>nul
gdisk %in% /cre /pri /sz:%START% /for /q /y /v:START>nul
count Mbytes -%START%
gdisk %in% /act /p:1 /y>nul
gdisk %in% /cre /ext /y>nul
count Mbytes -%BACKUP%
gdisk %in% /cre /log /sz:%Mbytes% /for /q /y /v:SYSTEM>nul
gdisk %in% /cre /log /for /q /y /v:BACKUP /r>nul
goto end

:end
set yn=
set in=
set Num=
set HD=
set START=
set SYSTEM=
set DATA=
set MEDIA=
set GAMES=
set BACKUP=
可能需改进: gdisk %in% /hide /p:partn-no /y

有何建议或改进的请赐教,觉得不错的请帮忙加分,谢谢!
作者: lianjiang2004     时间: 2009-10-31 19:49
1,/del /all不是什么时候都能加的。
2,最关键的,是最好写一下分区方案确定的思路,这是一键分区工具的关键。
3,gdisk %in% /cre /pri /sz:%START% /for /q /y /v:START>nul
    gdisk %in% /cre /log /sz:%SYSTEM% /for /q /y /v:SYSTEM>nul
不解的是为何逻辑分区要用system作卷标?与习惯似乎不太符。
作者: chishingchan     时间: 2009-10-31 20:13


  Quote:
Originally posted by lianjiang2004 at 2009-10-31 07:49 PM:
1,/del /all不是什么时候都能加的。
2,最关键的,是最好写一下分区方案确定的思路,这是一键分区工具的关键。
3,gdisk %in% /cre /pri /sz:%START% /for /q ...

1、既然重新分区,所以有此命令;
   还要说明的是此批处理对于大容量硬盘是预处理的,经过预处理获取“资料”盘的大小。
2、思路方面是检测硬盘的大小来设定区分的。
3、N年前就养成启动分区与系统分区区分开来的习惯,且感觉良好。

谢谢你的建议!

[ Last edited by chishingchan on 2009-10-31 at 20:18 ]
作者: lianjiang2004     时间: 2009-10-31 21:09
1,新硬盘是不能有del参数的。
2,启动分区就给8G,对一般人而言有点奢侈了吧?呵呵。
3,个人的良好习惯与一般人的传统使用习惯之间的协调,也是这个批处理能否得到广泛传播与应用相关的。
作者: chishingchan     时间: 2009-11-2 22:13


  Quote:
Originally posted by lianjiang2004 at 2009-10-31 09:09 PM:
1,新硬盘是不能有del参数的。
2,启动分区就给8G,对一般人而言有点奢侈了吧?呵呵。
3,个人的良好习惯与一般人的传统使用习惯之间的协调,也是这个批处理能否得到广泛传播与应用相关的。

1、新硬盘应该也可以使用del参数吧?现在的新硬盘好像默认只有一个分区,我还不确定,因未研究。
2、个人习惯(不知是否良好),C盘只包含启动文件:包括纯DOS、虚拟软驱和影子系统的启动菜单。平时临时下载到C盘再经整理到资料盘,因为下载,所以分配8G,还有一个原因别人装电脑的惯性必在C盘,所以就算系统装在C盘也够装。
3、个人的良好习惯这个可不好说,当然分区时输入准确数字当然是对于个人绝对是个人爱好,但对于不懂的人来说还不懂操作。如何评之为良好此应是个迷。
你的作品:Gdisk一键分区 09.02.27 我刚发现,下载了参考学习一下。

粗略运行过后提点建议或意见:
1、不需要太多的文字说明
2、建议使用K生成字库执行文件。
作者: yyx     时间: 2009-11-10 10:36
新硬盘是没有任何信息的,没有分区




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5