![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-13 04:12 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS学习入门 & 精彩文章 (教学室) » 求助--如何使得这个批处理文件更简练? |
| 可打印版本 1,351 / 4 |
| 第1楼 walu | 发表于 2004-01-14 00:00 |
| 高级用户 发帖 201 积分 916 | |
|
求助--如何使得这个批处理文件更简练? 内容如下: 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 |
|
| 第2楼 iceboy | 发表于 2004-01-14 00:00 |
| 银牌会员 发帖 512 积分 1,681 | |
|
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 OGHOSTGhost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=%driv%:\WIN.gho -Z9 -sure -fx :END |
|
| 第3楼 GOTOmsdos | 发表于 2004-01-15 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
看看这样简化如何? 修正在后
|
|
| 第4楼 iceboy | 发表于 2004-01-16 00:00 |
| 银牌会员 发帖 512 积分 1,681 | |
|
不是啊, 那个批处理就是从 Z 到 C 盘找这个 win.gho, (如果 D、E 盘都有就用 D 盘的)
仔细看看啊, 不是你说的那个样子啊... 你的第二个批处理我看不懂... (可能实现吗) |
|
| 第5楼 GOTOmsdos | 发表于 2004-01-17 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
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! ”) |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |