中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 如何实现用dos程序自动调整分区大小????
« [1] [2] [3] [4] [5] [6] [7] »
作者:
标题: 如何实现用dos程序自动调整分区大小???? 上一主题 | 下一主题
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 46 楼』:  

我已再次发送到你两个邮箱了

2004-3-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 47 楼』:  

邮件收到,正在测试。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-3-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 48 楼』:  

版主,你好!测试怎么样了?能否帮我完善一下我那个自动调整的脚本?

2004-3-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 49 楼』:  

基本上完成了。不过在写脚本时出现了一些问题,还需要大家共同研究。

下面是有关文件的下载:
1、PowerQuest Partition Magic Pro 7.0 For DOS(866KB,点击下载)
2、PowerQuest PartitionMagic Pro脚本设计参考文档(PDF格式英文文档,205KB,点击下载)
3、在硬盘最后面自动创建指定大小的主分区脚本版本1(运行时出错,但脚本写的自认没有问题,请高手们共同研究)
4、在硬盘最后面自动创建指定大小的主分区脚本版本2(运行正常,但没有脚本1中的程序完美,凑和着用吧)

上述书写的脚本中都写了详尽的注释,请使用时自己根据实际情况修改里面的参数。

脚本的用法(假设脚本文件名为PQ.PQS,且在当前目录下):
pqmagic /cmd=pq.pqs [/dbg=debug.txt] [/log=log.txt]

[]中的内容为可选参数,可以用来调试和检查脚本执行过程中出现的问题:
/dbg:  调试文件
/log:   执行日志文件


===============
版本1脚本内容:
// ****************************************************************************************************************
// CreatePrimaryPartitionAtDiskEnd.PQS:在第一块硬盘的最后建立指定大小的主分区
// 运行前提:
//   1、硬盘最后面一个分区(一般是扩展分区的最后一个逻辑盘)有足够的空闲空间(包括后面的未分配空间)有满足需要的空间。
//   2、硬盘上所有的主分区加扩展分区数量不能大于3。
// 脚本创建者:Climbing(QQ:653668, Email:xclimbing@msn.com, Homepage:http://climbing.minidns.net/dvbbs)
// 创建日期:2004.03.15
// 目前本脚本运行状态:不能正常运行,在运行到第56行时出错,原因未明
// ****************************************************************************************************************

// 设置你要创建的主分区的大小,单位为MB(默认是2048MB,即2G)。
Dim PriSize
PriSize = 2048

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

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

// 检测当前硬盘上的主分区数量
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
        //选择最后一个分区
        Select Partition Last

        // 检测最后一个分区后面的剩余空间
        Dim LastFreeNum
// 注意:在运行下面加粗的这一行命令时会出错,错误提示是该命令无法完成。
// 英文提示:[Script error(53)]: Unable to complete command:
// 这个命令的作用应该是返回硬盘最后一个分区后面的未分配空间的编号,如果没有,则返回0
        LastFreeNum = GetUnallocatedNumber After Selected Partition

        Dim NeedSpace
        NeedSpace = PriSize

        Dim bTrun
        bTrun = 1

        IF LastFreeNum  0 Then
                Select Unallocated LastFreeNum
                If GetSelectedUnallocatedSize = NeedSpace Then
                        //改变最后一个分区的大小,在其后面空出需要大小的空间(即FreeSpace变量保存的值)
                        Resize Space After NeedSpace
                Else
                        bQuit = 1
                End If
        End If

        If bQuit = 0 Then
                //选中最后的未分配空间(刚才空出的)
                Select Unallocated After Selected Partition

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

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


版本2脚本内容:
// ****************************************************************************************************************
// CreatePrimaryPartitionAtDiskEnd.PQS:在第一块硬盘的最后建立指定大小的主分区
// 运行前提:
//   1、硬盘最后面一个分区(一般是扩展分区的最后一个逻辑盘)有足够的空闲空间(包括后面的未分配空间)有满足需要的空间。
//   2、硬盘上所有的主分区加扩展分区数量不能大于3。
// 脚本创建者:Climbing(QQ:653668, Email:xclimbing@msn.com, Homepage:http://climbing.minidns.net/dvbbs)
// 创建日期:2004.03.15
// 目前本脚本运行状态:正常
// ****************************************************************************************************************

// 设置你要创建的主分区的大小,单位为MB(默认是2048MB,即2G)。
Dim PriSize
PriSize = 2048

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

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

// 检测当前硬盘上的主分区数量
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
                bQuit = 1
        End If
       
        If bQuit = 0 Then
                //选中最后的未分配空间(刚才空出的)
                Select Unallocated After Selected Partition

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

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

在脚本2中,如果最后一个分区后面有未分配空间,那么我先将最后一个分区扩大占满未分配空间,然后将将它缩小腾出需要的空间,这样中间就绕了一个弯,可能会导致操作过程大幅度延长(例如你最后一个分区中存放的数据较多的话),当然,如果最后一个分区没有多少数据,应该不会太影响执行速度的。









[此贴子已经被作者于2004-3-15 21:16:26编辑过]






偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-3-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
mewf
中级用户




积分 344
发帖 55
注册 2004-3-7
状态 离线
『第 50 楼』:  

谢谢各位拉!由于我们这边是2个人上网!白天她上晚上我上所以请原谅!来晚拉!谢谢你们帮我解决了这个问题!还有能不能帮忙把如何测试系统盘已用空间也写上去(测试出系统盘已用大小分配给要重建的备份分区的大小,这样的目的是为了不浪费空间)

2004-3-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (41371200)  编辑帖子  回复  引用回复
mewf
中级用户




积分 344
发帖 55
注册 2004-3-7
状态 离线
『第 51 楼』:  

还有能不能让它在执行的过程中不显示pq界面!显示成我们自己设定的界面啊?

2004-3-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (41371200)  编辑帖子  回复  引用回复
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 52 楼』:  

版主,你的第一个脚本再加把劲完善它吧,有没有可能是PQ7.0有BUG呢?如果能找个8.0的专业版试一试就最好。

2004-3-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 53 楼』:  

我真的找不出来第一个脚本的程序写的有什么问题,我是完全按照pmscript.pdf中的语法写的命令,但执行就是出错,这可能需要请教PowerQuest的技术支持了。

另外,偶虽然号称为版主,可实际上不是版主,就算是,也得让W坛主给开了,呵呵



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-3-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
mewf
中级用户




积分 344
发帖 55
注册 2004-3-7
状态 离线
『第 54 楼』:  

对了!pq8普通的dos版不知道有没有这些功能哦!
/ARG=
这个参数不知道是不是和/cmd=也样啊!要是一样试试pq8好了

2004-3-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (41371200)  编辑帖子  回复  引用回复
mewf
中级用户




积分 344
发帖 55
注册 2004-3-7
状态 离线
『第 55 楼』:  

不会的!

2004-3-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (41371200)  编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 56 楼』:  

已经试过了,普通的PQ8版本不支持脚本操作,只有pro版本的PQ才能这个功能,也就是说才有/CMD参数,/ARG参数是用来指定命令行参数的,也就是说,除了/ARG参数外,其它的参数可以放到一个文件中然后由/ARG参数来引用,这是为了防止命令行参数过长超过最大限制而设计的。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-3-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 57 楼』:  

Climbing版主,你好!
“能不能帮忙把如何测试系统盘(C盘)已用空间也写上去(测试出系统盘已用大小分配给要重建的备份分区的大小,这样的目的是为了不浪费空间)”这个提议好,能不能实现呢?

2004-3-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
mewf
中级用户




积分 344
发帖 55
注册 2004-3-7
状态 离线
『第 58 楼』:  



  Quote:
以下是引用Climbing在2004-3-15 23:24:01的发言:
已经试过了,普通的PQ8版本不支持脚本操作,只有pro版本的PQ才能这个功能,也就是说才有/CMD参数,/ARG参数是用来指定命令行参数的,也就是说,除了/ARG参数外,其它的参数可以放到一个文件中然后由/ARG参数来引用,这是为了防止命令行参数过长超过最大限制而设计的。

谢谢你的耐心解释!谢谢!希望能把前面的问题解决了!我现在正把pq的说明一个单词一个单词的翻译呢!不过不知道什么时候才能翻译完啊!晕~~~~~~~~~~~~~~~晕!!

2004-3-16 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (41371200)  编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 59 楼』:  



  Quote:
以下是引用walu在2004-3-16 7:19:11的发言:
Climbing版主,你好!
“能不能帮忙把如何测试系统盘(C盘)已用空间也写上去(测试出系统盘已用大小分配给要重建的备份分区的大小,这样的目的是为了不浪费空间)”这个提议好,能不能实现呢?

其实我上面给出的脚本中已经有了检查一个分区可用空间大小的命令,一个硬盘上可能有很多个分区,不一定要从C盘(或者说硬盘上的第一个分区)突出空间用来备份数据,除非你的硬盘上只有这一个分区,如果是这种情况,我上面的脚本就可以实现这个功能。

// 选择硬盘上的第一个分区,也就是你说的C分区
Select Partition First

// 检查该分区上的可用空间是否有1000MB,如果有,则空出。
IF GetUnusedAmount >= 1000 Then
     Resize Space After 1000
End If

// 选择刚才腾出的空间
Select Unallocated After Selected Partition

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

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

注意:以上的命令仅是示例,在运行中可能会出现问题。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-3-16 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 60 楼』:  

不是,我的意思不是这个。
我的意思是:我想用F11一键还原系统备份C盘,将在硬盘最后一个分区分出一个新分区来存放C盘的镜像。
按照你的自动分区方法,新的分区只能固定2G或1G,总之是固定的。我想自动检测C盘数据若有2G的话,新的分区就自动调整为4G;若有1G的话,新的分区就自动调整为2G。。。。。。

2004-3-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] [6] [7] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: