无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 8314|回复: 46

再次请教个批处理问题

[复制链接]
发表于 2008-6-22 21:03:51 | 显示全部楼层 |阅读模式
有啥命令可以建立目录时不要指定盘符,就像GHOST时,可以这样指定第一硬盘的第二个分区dst=1:2

因为发现用指定的盘符建立目录,在WINDOWS或VISTA系统是正常的,但如果在PE系统下,有时会发现盘符错乱,

而导致备份或还原出错,比如WINDOWS系统的D盘,在PE系统有可能为F或E盘,这样偶直接指定D盘的Gho~1目录,就会

找不到盘符而备份或还原出错,出错这种的情况大多数是品牌机

请大家帮帮忙看有没有比较好的解决方法
发表于 2008-6-22 21:56:37 | 显示全部楼层
Ghost 本来就是用 x:x 的形式来表示盘符路径。
回复

使用道具 举报

 楼主| 发表于 2008-6-22 22:16:08 | 显示全部楼层
有啥好方法解决不??
回复

使用道具 举报

发表于 2008-6-22 22:47:42 | 显示全部楼层
据我所知,与Ghost系出同门的 omnifs32.exe   可以按 x:x 的形式来创建文件夹。但不支持畸形目录的创建。

其实,照你的情况,如果你备份和还原用盘符的形式怕出错,有一个办法可以弥补这个缺陷,你也用不着寻找不用指定创建文件夹的方法。前提是你所创建的文件夹是唯一的,如:某一畸形目录(一般很少人随便建立这种文件夹,所以还是有基本的保证)。

解决方法:

用 Ghost 备份和还原时,先检测你所建立的目录在哪里,然后把参数替换进Ghost里面。再操作就可以了。当然,如果你备份和还原的文件名是固定的,那么可以文件夹和文件同时定位。这样就更加可以保证唯一性了。
回复

使用道具 举报

 楼主| 发表于 2008-6-22 23:22:09 | 显示全部楼层
具体GHOST的命令如何编写,偶建立的目录gho.(畸形目录)(因为这能防止删除)
麻烦你详细写个代码,谢谢了
上次那个备份的代码相信你也知道了,就是要按那个弄的
回复

使用道具 举报

发表于 2008-6-23 00:08:54 | 显示全部楼层
我简单的举一个例子,未测试...

@echo off
:: 检测安装时所建立目录的位置
set allDrive=c d e f g h i j k l m n o p q r s t u v w
for %%i in (%allDrive%) do if exist %%i:\gho~1 set f=%%i
if exist %f%: set gfile=%f%:\gho~1

:MyGhost
echo.
echo               备份(B)     还原(R)
Echo      ───────────────────
echo.
set Ighost=
set /p Ighost=  请选择你想要的操作》
if /i "%Ighost%"=="B" goto bak
if /i "%Ighost%"=="R" goto restore
goto MyGhost

:bak
:: 备份第一硬盘第一分区的镜像到X盘gho~1目录
Ghost32 -clone,mode=pdump,src=1:1,dst=%gfile%\sys.gho -Z9 -fx -sure
goto end


:restore
:: 从X盘gho~1目录的镜像恢复到第一硬盘第一分区
Ghost32 -clone,mode=pload,src=%gfile%\sys.gho:1,dst=1:1 -fx -sure
goto end

:end
回复

使用道具 举报

 楼主| 发表于 2008-6-23 00:19:44 | 显示全部楼层
偶试试看,能不能把备份和还原分成两个批理处,不想在一个批处理文件内执行备份和还原

还有备份也应该加入检测是否有备份过了,也就是要检查sys.gho文件是否存在
回复

使用道具 举报

发表于 2008-6-23 00:31:10 | 显示全部楼层
:: 当然可以,把下面两行 goto ... 换成你的批处理(你不是没学过基本的命令吧)。

if /i "%Ighost%"=="B" bak.bat
if /i "%Ighost%"=="R" restore.bat

:: 文件检测(跟文件夹检测差不多啊):
for %%i in (%allDrive%) do if exist %%i:\gho~1\sys.gho set f=%%i
if exist %f%: set gfile=%f%:\gho~1&goto bakset

:: goto bakset 上面这个goto ... 后面就是接你询问是否重新备份的批处理段...
回复

使用道具 举报

 楼主| 发表于 2008-6-23 00:36:01 | 显示全部楼层
偶测试可以了,剩下的就是要添加备份检测文件有存在否和弄成两个批处理文件的问题

这个偶自己慢慢弄了,如果不行再麻烦你了,你真的是一个热心人,好人,这么晚还帮在偶解决
问题,真的是很感谢

最后明天在到那些有问题的机子上再测试下
回复

使用道具 举报

 楼主| 发表于 2008-6-23 00:37:50 | 显示全部楼层
汗。。。你回复真快,偶才发回帖了

偶有学过啊,其实你弄的这些代码偶基本是看得懂的,就是有一些复杂的命令不会弄
回复

使用道具 举报

发表于 2008-6-23 00:39:02 | 显示全部楼层
见笑了,我也是只会简单的,高手都没来,只能我献丑了...

[ 本帖最后由 xypcmac 于 2008-6-23 12:40 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2008-6-23 01:46:56 | 显示全部楼层
呵呵,你这样还算简单啊,太谦虚了

这是偶修改完的代码,看需要再改进没,偶测试是可以的,就是以下这段代码启作用:

set allDrive=c d e f g h i j k l m n o p q r s t u v w
for %%i in (%allDrive%) do if exist %%i:\gho~1 set f=%%i
if exist %f%: set gfile=%f%:\gho~1


以下是备份文件的批处理代码:

@echo off
CLS
rem 一键备份C盘
:: 检测安装时所建立目录的位置
set allDrive=c d e f g h i j k l m n o p q r s t u v w
for %%i in (%allDrive%) do if exist %%i:\gho~1 set f=%%i
if exist %f%: set gfile=%f%:\gho~1
echo.
echo.
echo.
echo                         一键备份C盘  By:yigeren
echo.
echo.
echo                提示: 一旦"备份",立即执行,备份文件将保存在D盘!
echo.
echo                提示: 按"B"键,再按回车键,开始备份, 按"Q"键退出.
echo.
echo.
echo.
echo.
echo.
Set Choice=
Set /P Choice= 请选择备份或退出:
If "%Choice%"=="" Goto Call
If Not "%Choice%"=="" Set Choice=%Choice:~0,1%
If /I "%Choice%"=="B" Goto backup
If /I "%Choice%"=="Q" Exit
call backup.cmd
:backup
:: 文件检测
if exist %gfile%\yigeren.sys (
Cls
echo.
echo.
echo.
color 0c
echo                         系统已经备份过了&goto bakset
) else (
md d:\gho..\
cls
ghost32.exe -clone,mode=pdump,src=1:1,dst="%gfile%\yigeren.sys" -z3 -fx -sure
goto end
)
:Call
call backup.cmd
goto end

:bakset
echo.
echo.
echo                警告: 一旦"备份",立即执行,原有备份文件将被覆盖!
echo.
echo                重新备份系统请按"Y"键,再按回车键,退出请按"Q"键
echo.
echo.
echo.
Set b=
Set /P b= 请选择重新备份或退出:
if %b%#==# goto bakset
if /i %b%==Y goto reset
if /i %b%==Q goto end
cls
echo.
echo.
echo.
echo                         系统已经备份过了
goto bakset
goto end

:reset
cls
ghost32.exe -clone,mode=pdump,src=1:1,dst="%gfile%\yigeren.sys" -z3 -fx -sure
goto end
:end
回复

使用道具 举报

 楼主| 发表于 2008-6-23 01:47:34 | 显示全部楼层
这个是还原文件的批处理代码:

@echo off
CLS
rem 一键恢复C盘
set allDrive=c d e f g h i j k l m n o p q r s t u v w
for %%i in (%allDrive%) do if exist %%i:\gho~1 set f=%%i
if exist %f%: set gfile=%f%:\gho~1
echo.
echo.
echo.
echo                         一键恢复C盘  By:yigeren
echo.
echo.
echo                警告: 一旦"恢复",立即执行,C盘数据将全部被覆盖!
echo.
echo                提示: 按"R"键,再按回车键,开始恢复, 按"Q"键退出.
echo.
echo.
echo.
echo.
echo.
Set Choice=
Set /P Choice= 请选择恢复或退出:
If "%Choice%"=="" Goto Call
If Not "%Choice%"=="" Set Choice=%Choice:~0,1%
If /I "%Choice%"=="R" Goto restore
If /I "%Choice%"=="Q" Exit
call restore.cmd
:restore
cls
ghost32.exe -clone,mode=pload,src="%gfile%\yigeren.sys:1",dst=1:1 -fx -sure
goto end
:Call
call restore.cmd
goto end
:end
回复

使用道具 举报

 楼主| 发表于 2008-6-23 14:39:57 | 显示全部楼层
奇怪,在备份好后,然后再还原,再运行备份批处理文件系统就会蓝屏
回复

使用道具 举报

发表于 2008-6-23 19:50:04 | 显示全部楼层
先说说你上面那个批处理

备份:怎么检测的是文件,建立的是文件夹?
还原:没有检测和转换机制,如果文件不存在。操作者看到的是什么?

还有,我想了一下,觉得我们之前的所做的恢复菜单缺乏安全措施。我修改了一下检测机制。看起来似乎好点了。再测试一下看看有什么问题。

大家可以讨论一下,看看有什么好办法。
回复

使用道具 举报

 楼主| 发表于 2008-6-24 00:41:26 | 显示全部楼层
备份的你说建立文件夹,是这个代码吗:md d:\gho..\     
我已经删除了

还原的是没加入检测机制,可以添加检测下如果找不到yigeren.sys,就提示系统没备份过。
回复

使用道具 举报

发表于 2008-6-24 01:00:37 | 显示全部楼层
无论在Wndows还是PE系统,第一次启动一键恢复,都需要检测备份文件夹是否存在,没有则新建(新建时还要分析在哪里新建好)。若存在备份文件夹,就要继续分析备份、恢复的目标位置在哪里才是正确的。

比如:你备份的时候只有1个硬盘两个分区,这简单了。但如果在下次恢复时,电脑临时增加了硬件,如用U盘启动PE(HD格式),你就必须检测恢复到哪里比较好。这样才比较安全。备份倒是没有问题,固定唯一的文件夹很好定位。
回复

使用道具 举报

 楼主| 发表于 2008-6-24 01:27:48 | 显示全部楼层
还原的批处理需要改改了,如果有两个硬盘或像你所说的,用U盘启动后,把U盘识别成第一硬盘,那还原后,会把数据弄丢的,那可就惨了,我想是不是让它还原到指定的C盘,而不管它在第几硬盘的第几分区上,不过现在出现的蓝屏是哪出的问题?

[ 本帖最后由 yigeren 于 2008-6-24 10:07 AM 编辑 ]
回复

使用道具 举报

发表于 2008-6-24 12:16:17 | 显示全部楼层
1. 还原指定到C盘也不行,假设有两个硬盘,第一个硬盘主分区安装XP,第二个硬盘主分区安装了PE,如果是第二个硬盘启动PE的话,就会调换C盘和d盘。

2. 你是在什么环境出现蓝屏的?我想与你的批处理关系不大,你可以手动恢复一下,看看是否有同样问题就知道了。

我看还是老办法,结合 ghost 的磁盘检测信息 和 usb 检测来确定备份目录的位置以及还原的目标位置较好!第一步我已经做完。当U盘或USB移动硬盘只有1个分区的时候,多少USB设备都可以,基本没有什么问题了。
回复

使用道具 举报

 楼主| 发表于 2008-6-24 12:31:31 | 显示全部楼层
我做的测试都在PE系统下测试,我用以前的简单批处理备份和还原,都不会出现蓝屏,但只要换成现在弄的这个,就会蓝屏,昨天已有反复测试过,在虚拟机上测试过,实机上也测试过
有时先备份再还原,再运行备份文件,就蓝屏,有时先运行还原,再备份,再运行还原,还是蓝屏
回复

使用道具 举报

发表于 2008-6-24 13:00:52 | 显示全部楼层
那你用我刚做的这个试试吧!先不要修改。在我这里实机试过没有问题。

[ 本帖最后由 xypcmac 于 2008-6-24 01:19 PM 编辑 ]

RfHD.rar

818 Bytes, 下载次数: 91, 下载积分: 无忧币 -2

回复

使用道具 举报

 楼主| 发表于 2008-6-24 13:13:10 | 显示全部楼层
少了CHeckUSB.exe文件
回复

使用道具 举报

发表于 2008-6-24 13:20:21 | 显示全部楼层
没有什么事的,这个功能我还没有加入呢!刚才测试,忘记删除那行批处理而已。

重新下载吧!
回复

使用道具 举报

 楼主| 发表于 2008-6-24 13:32:26 | 显示全部楼层
汗。。。还是出错,到这句提示出错了:set hp=%c:~0,1%:1
提示:此时不应有 1c:~-1
回复

使用道具 举报

发表于 2008-6-24 13:50:35 | 显示全部楼层
搞错了吧!不是 set hp=%c:~0,1%:1 出错!
是 这句 if %c:~0,1% GTR 1 if %c:~-1,1% GTR 1 goto RtHDSet 出错!
你看提示:此时不应有 1c:~-1 就知道了!

为什么?是因为你批处理运行的位置不可写Ghost32.exe临时文件 GHSTSTAT.TXT ?我用的是ghost32 11.02
回复

使用道具 举报

 楼主| 发表于 2008-6-24 13:53:22 | 显示全部楼层
我用的是11.5的版本,GHSTSTAT.TXT有自动建立


晕,换了GHOST11.02版本才行,可运行后就直接恢复了,没显示选择菜单

[ 本帖最后由 yigeren 于 2008-6-24 01:59 PM 编辑 ]
回复

使用道具 举报

发表于 2008-6-24 14:18:41 | 显示全部楼层
正常!
那么表明你的备份目录在第一硬盘的第一分区之后(可能是1:2、1:3、1:4...)

出现备份菜单的情况是:当你的电脑有两个硬盘,并且备份目录在第二硬盘第一分区之后(可能是2:2、2:3、2:4...)。

1. 只有1个硬盘,这是最简单的,还需要选吗?
2. 两个硬盘,但 备份目录放在第二硬盘第一分区(即2:1)还需要选吗? 难道恢复到2:2?
回复

使用道具 举报

 楼主| 发表于 2008-6-24 14:22:20 | 显示全部楼层
不是,需要一个交互过程,就是要还原前,要确定下,不然有时按错了,那就不好了

你不是还要添加一个检查U盘的
回复

使用道具 举报

发表于 2008-6-24 14:30:58 | 显示全部楼层
也是可以的!

但如果这样就不用太多检测了,直接提供选择菜单得了,因为所有都需要操作者决定。

恢复  1:1  按1
恢复  2:1  按2
恢复  3:1  按3
......

不用 ghost32 11.5 的原因:1.它不支持中文目录;2.速度稍为慢点;3.要求稍为高点;4.它提供的新功能我暂时用不到...
回复

使用道具 举报

 楼主| 发表于 2008-6-24 14:39:29 | 显示全部楼层
不是这个意思,就是在批处理检测好正确恢复哪个盘前,需要操作者按Y键确认还原
而不是要显示那些菜单供用户选择,这样的选择菜单,对不懂电脑的人来说,根本不知道选择哪个,我们需要的只是让他们再确定下是否还原而已,而不需要让他们要选择恢复到哪

就像前面我那个还原文件一样,确认还原就按Y键,再按回车键,不还原按Q键退出,其它的不需要他们选择,那些他们根本看不懂


那个GHOST11.02貌似能恢复GHOST11.5备份的映像

[ 本帖最后由 yigeren 于 2008-6-24 02:43 PM 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 03:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表