中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-13 19:49
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 如何实现用dos程序自动调整分区大小????
61 发表于 2004-03-16 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
这也不复杂啊:

将我写的脚本文件开始定义PriSize的部分改成下面的命令
//选择第一个分区
Select Partition First
dim PriSize
// 检测第一个分区的使用空间,将PriSize设置成其使用空间的2倍
PriSize = GetUsedAmount * 2
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
62 发表于 2004-03-16 00:00 ·  中国 广东 河源 电信
高级用户
★★
积分 916
发帖 201
注册 2003-05-04 00:00
UID 1849
性别 男
状态 离线
谢谢!
你的英文水平也很高,能否将脚本说明书翻译呢?
另:请问Drive Image Pro(专业版)的最高版本是多少?你有吗?我只有它的4.0中文版。
63 发表于 2004-03-16 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
我靠,翻译?好几十页呢,我可没有那么大时间。

我没有用过Drive Image,不了解。到网站上查一下啊
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
64 发表于 2004-03-16 00:00 ·  中国 新疆 伊犁哈萨克自治州 奎屯市 电信
中级用户
★★
积分 344
发帖 55
注册 2004-03-07 00:00
UID 19425
性别 男
状态 离线
// ****************************************************************************************************************
// CreatePrimaryPartitionAtDiskEnd.PQS:在第一块硬盘的最后建立第一个分区使用空间的1/2大小的主分区
// 如果最后一个分区的大小不够就将从倒数第二个分区中调整出要分区的空间并将最后一个分区移至倒数第二个分区的末端
// 再在最后的空间上分出主分区
// 脚本创建者:是根据“Climbing(QQ:653668, Email:xclimbing@msn.com, Homepage:http://climbing.minidns.net/dvbbs)”兄的教本改编的。
// mewf(QQ:41371200,Email:wf6187@126.com Homepage:http://www.yd0101.com(万人迷网络电话))
// 创建日期:2004.03.16
// 目前本脚本运行状态:等待测试(本人现在没有可用来做试验的硬盘拉!^_^)
// ****************************************************************************************************************

// 选择第一块硬盘
Select Disk 1
//默认情况下不检测坏扇区,提高操作速度
Set Default Bad Sector Test State OFF
//选择第一个分区
Select Partition First
Dim PriSize
// 检测第一个分区的使用空间,将PriSize设置成其使用空间的1/2
PriSize = GetUsedAmount / 2
// 检测当前硬盘上的主分区数量
Dim PriNum
Dim i
i = 1
PriNum = 0
Select Partition FIRST
DO WHILE i < GetTotalPartitions
IF IsPrimary Then
PriNum = PriNum + 1
End If
Select Partition Next
i = i + 1
Loop
IF IsPrimary Then
PriNum = PriNum + 1
End If
// 检测硬盘上是否有扩展分区,如果有,也算是一个主分区
dim ExtNum
ExtNum = GetPartitionNumber Extended
If ExtNum 0 Then
PriNum = PriNum + 1
End If
// 只有主分区数量小于4才可以继续
IF PriNum = PriSize Then
//改变最后一个分区的大小,在其后面空出需要大小的空间(即FreeSpace变量保存的值)
Resize Space After PriSize
Else
// 检测硬盘上逻辑分区的个数
dim LogNum
dim l
l = 1
LogNum = 0
Select Partition FIRST
DO WHILE l < GetTotalPartitions
IF IsLogical Then
LogNum = LogNum + 1
End If
Select Partition Next
l = l + 1
Loop
// 定义倒数第二个分区
dim ParNum
ParNum = PriNum + LogNum - 2
// 选择倒数第二个分区
Select Partition ParNum
//改变倒数第二个分区的大小,在其后面空出需要大小的空间(即FreeSpace变量保存的值)
Resize Space After PriSize
//选择最后一个分区,并将其移至倒数第二个分区的末端
Select Partition Last
Move Left Max
End If
//选中最后的未分配空间(刚才空出的)
Select Unallocated After Selected Partition
//在硬盘最后创建指定大小的分区,分区卷标为SYS_GHOST,当然,你可以根据实际情况修改卷标。
Create /FS=FAT32 /LABEL="SYS_GHOST"
// 将这个分区转换为主分区
Convert To Primary
End If




65 发表于 2004-03-16 00:00 ·  中国 新疆 伊犁哈萨克自治州 奎屯市 电信
中级用户
★★
积分 344
发帖 55
注册 2004-03-07 00:00
UID 19425
性别 男
状态 离线
脚本下载地址:http://www.yd0101.com/soft/f11_AutoPartition.PQS


66 发表于 2004-03-17 00:00 ·  中国 广东 河源 电信
高级用户
★★
积分 916
发帖 201
注册 2003-05-04 00:00
UID 1849
性别 男
状态 离线
经我在虚拟机上测试,脚本出错。
这个问题还是有请Climbing兄指点了,他是高手。
mewf兄的这个脚本对于安装一键恢复很有帮助,请Climbing兄帮帮忙。
67 发表于 2004-03-17 00:00 ·  中国 新疆 伊犁哈萨克自治州 奎屯市 电信
中级用户
★★
积分 344
发帖 55
注册 2004-03-07 00:00
UID 19425
性别 男
状态 离线
Climbing兄 出来指导指导啊!谢谢拉!急用啊!~~~~~~~~~~~~~~~~~~~~~~~~~~!
68 发表于 2004-03-17 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
不要急啊,我也不是天天盯在这里嘛,我正在看。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
69 发表于 2004-03-17 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
呵呵,我的脚本来了,可费了我不少心思,不过还需要大家进一步测试。

脚本的下载链接:
自动在第一块硬盘最后创建一键恢复用主分区的脚本(经过初步测试,需要进一步测试,5KB)

下面是脚本内容:
// ****************************************************************************************************************
// F11_AutoCreatePartition.PQS:在第一块硬盘的最后建立第一个分区使用空间的1/2 + 200MB大小的主分区
// 本脚本的设计目标是适应各种情况的硬盘。
// 脚本创建者:Climbing(QQ:653668, Email:xclimbing@msn.com, Homepage:http://climbing.minidns.net/dvbbs)
// 创建日期:2004.03.17
// 目前本脚本运行状态:初步测试运行正常,但没有运行各种极限情况下的测试,因此需要进一步测试
// ****************************************************************************************************************

// 允许用户在操作后手工重新启动计算机,否则将自动重新启动计算机
Allow Manual Reboot

//默认情况下不检测坏扇区,提高操作速度
Set Default Bad Sector Test State OFF

// 选择第一块硬盘
Select Disk 1

//选择第一个分区
Select Partition First
Dim PriSize
// 检测第一个分区的使用空间,将PriSize设置成其使用空间的1/2再加上200M,否则恐怕不够用
PriSize = GetUsedAmount / 2 + 200

// 检测当前硬盘上的主分区数量
Dim PriNum
Dim i
i = 1
PriNum = 0
Select Partition FIRST
DO WHILE i < GetTotalPartitions
IF IsPrimary Then
PriNum = PriNum + 1
End If
Select Partition Next
i = i + 1
Loop
IF IsPrimary Then
PriNum = PriNum + 1
End If
// 检测硬盘上是否有扩展分区,如果有,也算是一个主分区
dim ExtNum
ExtNum = GetPartitionNumber Extended
If ExtNum 0 Then
PriNum = PriNum + 1
End If

// 只有主分区数量小于4才可以继续
IF PriNum < 4 Then
// 如果存在扩展分区,则选择扩展分区,让它占满前后所有的未分配空间
If ExtNum 0 Then
Select Disk 1
Select Partition Extended
Resize Max
End if

// dOperPnum用来保存操作过多少分区
Dim dOperPnum
dOperPnum = 0

// bMove 用来判断是否进行了空间腾出操作,如果是,刚为后面的空间移动提供判断基础
Dim bMove
bMove = 0

// dLastOpPar保存最后一次操作的分区编号
Dim dLastOpPar

// 如果当前未分配空间数量已经满足需要,将不需要进行重新分配空间操作
If GetTotalUnallocatedSpaces < PriSize Then


//选择最后一个分区并判断其是否为主分区
Select Partition Last
Check

// FreeSpace用来保存已经腾出的空间
Dim FreeSpace
FreeSpace = 0

// NeedSpace用来保存还需要腾出多少空间
Dim NeedSpace
NeedSpace = PriSize

Dim dTmp
dTmp = 0

// 从最后一个分区循环往前操作以腾出需要的空间
i = 0
Do While FreeSpace = NeedSpace Then
//改变该分区的大小,在其后面空出需要大小的空间(即NeedSpace变量保存的值)
Resize Space After NeedSpace
FreeSpace = FreeSpace + NeedSpace
bMove = 1
Else
// 如果本分区剩余空间大于100M,则将本分区缩小未使用空间减100M的大小
If GetUnusedAmount > 100 Then
dTmp = GetUnusedAmount - 100
Resize Space After dTmp
FreeSpace = FreeSpace + dTmp
NeedSpace = PriSize - FreeSpace
bMove = 1
End If
End If
i = i + 1
dOperPnum = dOperPnum + 1
// 如果循环到了第一个分区但空间仍然不足,则直接退出循环
If i < GetTotalPartitions Then
Select Partition Previous
Check
dLastOpPar = GetPartitionNumber Next
Else If FreeSpace < PriSize Then
dLastOpPar = GetPartitionNumber First
Exit Loop
End If
Loop
End If

// 如果没有进行分区分割操作,两个原因:1、磁盘空间不足;2、未分配空间已经够用
If bMove = 0 Then
dLastOpPar = GetPartitionNumber First
dOperPnum = GetTotalPartitions
Select Partition First
Move Left Max
Else
// 开始将前一个循环中腾出的空间进行后移操作
Dim LastMoveParType
Dim CurParNum
i = 1
If bMove = 1 Then
Select Disk 1
Select Partition dLastOpPar
CurParNum = GetPartitionNumber Next
If IsPrimary Then
LastMoveParType = 1
Else
LastMoveParType = 0
End If
Do While i < dOperPnum
Select Partition Next
If IsPrimary Then
If LastMoveParType = 0 Then
Select Disk 1
Select Partition Extended
Resize Min
End If
Else
If LastMoveParType = 1 Then
Select Disk 1
Select Partition Extended
Resize Left Boundary Max
End If
End If
Select Partition CurParNum
Move Left Max
If IsPrimary Then
LastMoveParType = 1
Else
LastMoveParType = 0
End If
CurParNum = GetPartitionNumber Next
i = i + 1
Loop
// 选中最后的未分配空间(刚才空出的)
Select Unallocated After Selected Partition

//在硬盘最后创建指定大小的分区,分区卷标为SYS_GHOST,当然,你可以根据实际情况修改卷标。
Create /FS=FAT32 /LABEL="SYS_GHOST"

// 将这个分区转换为主分区
Convert To Primary
End If
End If
End If

测试以后有什么问题请及时反馈,谢谢!
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
70 发表于 2004-03-17 00:00 ·  中国 新疆 伊犁哈萨克自治州 奎屯市 电信
中级用户
★★
积分 344
发帖 55
注册 2004-03-07 00:00
UID 19425
性别 男
状态 离线
Climbing兄 谢谢你!非常感谢!!!
71 发表于 2004-03-17 00:00 ·  中国 新疆 伊犁哈萨克自治州 奎屯市 电信
中级用户
★★
积分 344
发帖 55
注册 2004-03-07 00:00
UID 19425
性别 男
状态 离线
Climbing兄 有没有让pq在执行的过程中不显示pq介面!还有就是有没有能够在WinXP/Win2000/Win9X下都能用又不需要安装的pq pro 7.0啊!谢谢拉!有的共享一下啊!拜托!!!
72 发表于 2004-03-17 00:00 ·  中国 新疆 伊犁哈萨克自治州 奎屯市 电信
中级用户
★★
积分 344
发帖 55
注册 2004-03-07 00:00
UID 19425
性别 男
状态 离线
怎么没人响应 啊!!
73 发表于 2004-03-17 00:00 ·  中国 广东 河源 电信
高级用户
★★
积分 916
发帖 201
注册 2003-05-04 00:00
UID 1849
性别 男
状态 离线
我觉得这个不可能的了,据我了解它好象没有这方面的参数。具体Climbing兄 最有权威。
74 发表于 2004-03-17 00:00 ·  中国 新疆 伊犁哈萨克自治州 奎屯市 电信
中级用户
★★
积分 344
发帖 55
注册 2004-03-07 00:00
UID 19425
性别 男
状态 离线
以下是引用walu在2004-3-17 22:55:20的发言:
我觉得这个不可能的了,据我了解它好象没有这方面的参数。具体Climbing兄&nbsp;最有权威。

哪这个能不能实现啊"在WinXP/Win2000/Win9X下都能用又不需要安装的pq pro 7.0"
75 发表于 2004-03-18 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
以下是引用mewf在2004-3-17 20:01:28的发言:
Climbing兄&nbsp;有没有让pq在执行的过程中不显示pq介面!还有就是有没有能够在WinXP/Win2000/Win9X下都能用又不需要安装的pq&nbsp;pro&nbsp;7.0啊!谢谢拉!有的共享一下啊!拜托!!!


我在QQ上就已经说过了,我对显示界面之类的东西没有兴趣,我觉得你自己可以到网上搜罗一些在DOS下显示图片的小程序,然后用它覆盖PQ的界面(我不知道可行性如何)。

关于PQ for Windows,我觉得安装一下也并不麻烦,如果你真的想免安装,你可以使用安装监视软件检查PQ在安装时在系统目录下安装了哪些文件,把这些文件拷出来再放到PQ的安装目录中,或许应该有效。我没有试,因为我觉得有PQ for DOS就足够用了。PQ For Windows用来调试脚本还有些用处,其它的,我觉得用不到。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
论坛跳转: