中国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程序自动调整分区大小???? 上一主题 | 下一主题
Climbing
铂金会员

网络独行侠


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

这也不复杂啊:

将我写的脚本文件开始定义PriSize的部分改成下面的命令
//选择第一个分区
Select Partition First
dim PriSize
// 检测第一个分区的使用空间,将PriSize设置成其使用空间的2倍
PriSize = GetUsedAmount * 2



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




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

谢谢!
你的英文水平也很高,能否将脚本说明书翻译呢?
另:请问Drive Image Pro(专业版)的最高版本是多少?你有吗?我只有它的4.0中文版。

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

网络独行侠


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

我靠,翻译?好几十页呢,我可没有那么大时间。

我没有用过Drive Image,不了解。到网站上查一下啊



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




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

// ****************************************************************************************************************
// 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




[此贴子已经被作者于2004-3-17 1:40:58编辑过]




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




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

脚本下载地址:http://www.yd0101.com/soft/f11_AutoPartition.PQS


[此贴子已经被作者于2004-3-16 23:03:38编辑过]




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




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

经我在虚拟机上测试,脚本出错。
这个问题还是有请Climbing兄指点了,他是高手。
mewf兄的这个脚本对于安装一键恢复很有帮助,请Climbing兄帮帮忙。

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




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

Climbing兄 出来指导指导啊!谢谢拉!急用啊!~~~~~~~~~~~~~~~~~~~~~~~~~~!

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

网络独行侠


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

不要急啊,我也不是天天盯在这里嘛,我正在看。



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

网络独行侠


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

呵呵,我的脚本来了,可费了我不少心思,不过还需要大家进一步测试。

脚本的下载链接:
自动在第一块硬盘最后创建一键恢复用主分区的脚本(经过初步测试,需要进一步测试,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

测试以后有什么问题请及时反馈,谢谢!



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




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

Climbing兄 谢谢你!非常感谢!!!

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




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

Climbing兄 有没有让pq在执行的过程中不显示pq介面!还有就是有没有能够在WinXP/Win2000/Win9X下都能用又不需要安装的pq pro 7.0啊!谢谢拉!有的共享一下啊!拜托!!!

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




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

怎么没人响应 啊!!

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




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

我觉得这个不可能的了,据我了解它好象没有这方面的参数。具体Climbing兄 最有权威。

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




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



  Quote:
以下是引用walu在2004-3-17 22:55:20的发言:
我觉得这个不可能的了,据我了解它好象没有这方面的参数。具体Climbing兄&nbsp;最有权威。

哪这个能不能实现啊"在WinXP/Win2000/Win9X下都能用又不需要安装的pq pro 7.0"

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

网络独行侠


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



  Quote:
以下是引用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用来调试脚本还有些用处,其它的,我觉得用不到。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-3-18 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] [6] [7] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: