中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 求助--如何使得这个批处理文件更简练?
作者:
标题: 求助--如何使得这个批处理文件更简练? 上一主题 | 下一主题
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『楼 主』:  求助--如何使得这个批处理文件更简练?


内容如下:

IF NOT EXIST d:\win.gho GOTO e
Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=d:\WIN.gho -Z9 -sure -fx
call bfyz.bat

:e
IF NOT EXIST e:\win.gho GOTO f
Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=E:\WIN.gho -Z9 -sure -fx
call bfyz.bat

:f
IF NOT EXIST f:\win.gho GOTO g
Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=f:\WIN.gho -Z9 -sure -fx
call bfyz.bat

......

:y
IF NOT EXIST y:\win.gho GOTO z
Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=y:\WIN.gho -Z9 -sure -fx
call bfyz.bat

:z
end



2004-1-14 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
iceboy
银牌会员




积分 1681
发帖 512
注册 2003-8-2
状态 离线
『第 2 楼』:  

FOR %%I IN (z y x ... d c) DO IF EXIST %%i:\win.gho DO SET driv=%%i
IF NOT %driv%== THEN GOTO DOGHOST
ECHO Not found...
GOTO END
OGHOST
Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=%driv%:\WIN.gho -Z9 -sure -fx
:END



Somehow somewhere I've got to choose.
No matter if it is win or lose.
2004-1-14 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gotomsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 3 楼』:  看看这样简化如何?

修正在后

[此贴子已经被作者于2004-1-19 20:03:59编辑过]




2004-1-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
iceboy
银牌会员




积分 1681
发帖 512
注册 2003-8-2
状态 离线
『第 4 楼』:  

不是啊, 那个批处理就是从 Z 到 C 盘找这个 win.gho, (如果 D、E 盘都有就用 D 盘的)
仔细看看啊, 不是你说的那个样子啊...

你的第二个批处理我看不懂... (可能实现吗)



Somehow somewhere I've got to choose.
No matter if it is win or lose.
2004-1-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gotomsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 5 楼』:  

IF NOT EXIST d:\win.gho GOTO e
Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=d:\WIN.gho -Z9 -sure -fx
call bfyz.bat
:e
...........

哦,没错,这个批处理的意思是都执行,不过我觉得,楼主的原意很可能不是这样。因为这个批处理本身是重复的,失去了"if not exist ...." 这种假设的实际作用了。(因为不管怎样反正都是要执行:E:F:G ,,,,,:Z)
我估计楼主的假想是原先在一个盘中作了备份,后来他忘记在哪个盘了,但他想更新备份一次,找到处理后就不再找了。要符合此意,应该在每一段后加上goto end 再在最后加上:end才符合楼主原意。
但还是需要简化。

如果楼主原意是找到一个就处理一个,如下就行了:

适合2000  XP 2003:
for %%1 in (d e f ....z) do Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=%%1:\WIN.gho -Z9 -sure -fx && bfyz.bat

适合98:
(很遗憾,现在只能分开ghost...... 和bfyz.bat这两个任务。在98中我未找到把这两个任务放在一起的方法,如有人能解决就太好了。版主的批处理好象只执行一次就结束了,因为FOR命令只在本句内循环,如符合GOTO的条件,就转移了,连在本句内都不循环了)

for %%1 in (d e f ....z) do Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=%%1:\WIN.gho -Z9 -sure -fx
for %%1 in (d e f ....z) do if exist %%1:\win.gho bfyz.bat

如果楼主原意是找到第一个处理完就结束的话,如下:

for %%1 in (z y x ....... d) do if exist %%1:\win.gho set vol=%%1
Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=%vol%:\WIN.gho -Z9 -sure -fx
bfyz.bat

      &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
      &                                                                                                &
      &              有兴趣的话,可以耍一耍手动输入实参的DIY乐趣吧!           &
      &                                                                                                &
      &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

可以编个简单批处理实验一下,先在你最后两个盘的根目录里编一个内容分别为“dddddddddddddddddddddd”和“eeeeeeeeeeeeeeeeeeeeee”的文件,都名为"target.txt".
======================
编个名为“oneput.bat”的批处理如下:
(一次性手动输入)
@echo off
:loop
shift
if %1#==# goto end
if not exist %1:\target.txt goto loop
dir %1:\target.txt
type %1:\target.txt
:end

操作时,键入
oneput d d e f g h i j k l m n o p q r s t u v w x y z回车。(要多输入一个任意字符,因为shift会作废第一个,就相当于在它前面有过一次%1)

=========================
再编个名为“everyput.bat”的批处理: 看起来有点可怕!如有人能找到简洁的办法,就发贴吧!期待!。。。(正为此严重郁闷中!)

(互动式手动输入) 其实这是假想的,因为一般没有这么多盘,所以只要依你的盘数编就行了。

@echo off
:loop
if exist %vol%:\target.txt goto end
choice /c:defghijklmnopqrstuvwxyz /t:d,99 enter a drive letter

set vol=z
if errorlevel 23 goto loop
set vol=y
if errorlevel 22 goto loop
set vol=x
if errorlevel 21 goto loop
set vol=w
if errorlevel 20 goto loop
set vol=v
if errorlevel 19 goto loop
set vol=u
if errorlevel 18 goto loop
set vol=t
if errorlevel 17 goto loop
set vol=s
if errorlevel 16 goto loop
set vol=r
if errorlevel 15 goto loop
set vol=q
if errorlevel 14 goto loop
set vol=p
if errorlevel 13 goto loop
set vol=o
if errorlevel 12 goto loop
set vol=n
if errorlevel 11 goto loop
set vol=m
if errorlevel 10 goto loop
set vol=l
if errorlevel 9 goto loop
set vol=k
if errorlevel 8 goto loop
set vol=j
if errorlevel 7 goto loop
set vol=i
if errorlevel 6 goto loop
set vol=h
if errorlevel 5 goto loop
set vol=g
if errorlevel 4 goto loop
set vol=f
if errorlevel 3 goto loop
set vol=e
if errorlevel 2 goto loop
set vol=d
if errorlevel 1 goto loop

:end
dir %vol%:\target.txt
type %vol%:\target.txt
echo It''s done!

操作时,键入:
everyput d回车(每次输入一个:d......................z,直到出现“It''s done! ”)





















































































































































[此贴子已经被作者于2004-1-19 22:50:14编辑过]




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

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: