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