|
gotomsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『楼 主』:
征求怎样简化DOS批处理的交互式问答??
假设你原先在D E F 。。。。Z中作了GHOST备份,后来忘记在哪些盘了,但只想找到第一个备份更新备份一次就结束了。
假如更新备份的命令是这样:
@echo off
Ghost.exe -CLONE,MODE=PDUMP,SRC=1:1,DST=WIN.gho -Z9 -sure -fx
bfyz.bat
如果找到多少就处理多少,如下就行了:
适合2000 XP 2003:
@echo off
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中我未找到把这两个任务放在一起的方法,如有人能解决就赶快发贴吧!!
@echo off
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
如果是找到第一个处理完就结束的话,如下:
@echo off
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-29 22:37:15编辑过]
|
|
2004-1-19 00:00 |
|
|
Vicky26
初级用户
积分 133
发帖 7
注册 2004-1-21
状态 离线
|
|
2004-1-21 00:00 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
3 楼』:
Re gotomsdos:
一个很不错的主题,只是感觉上像是从论坛上几个人的问答中整理出来,解释性说明太少,所以欠缺条理性。
那个一次性输入的程序,输入时其实可以不必那么麻烦。以下的程序只需要要键入程序名即可。
交互性输入的必要性其实不是很大,不过由它引出的依序赋值倒是值得探讨。
Quote: | @echo off
if not [%1]==[] goto loop
call %0 d e f g h i j k l m n o p q r s t u v w x y z
goto end
:loop
if %1#==# goto end
if exist %1:\target.txt dir %1:\target.txt
if exist %1:\target.txt type %1:\target.txt
shift
goto loop
:end |
|
[此贴子已经被作者于2004-1-26 20:58:46编辑过]
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2004-1-26 00:00 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
4 楼』:
Re gotomsdos:
刚才分析了一下,得出依序赋值的方案,你看一看吧,提提意见。
Quote: | @echo off
echo set tag1=%%tag1%%*> tag.bat
echo set tag2=%%tag2%%*> eval.bat
echo if [%%tag1%%]==[%%tag2%%] set value=%%1>> eval.bat
choice /c:abcdefgh /n enter a letter:
for %%e in (1 2 3 4 5 6 7 8) do if errorlevel %%e call tag.bat
for %%f in (a b c d e f g h) do call eval.bat %%f
echo You choose letter %value%, tag1=%tag1%, tag2=%tag2%
pause
:end |
|
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2004-1-26 00:00 |
|
|
Kinglion
铂金会员
痴迷DOS者
积分 5792
发帖 1921
注册 2003-6-20 来自 金獅電腦軟體工作室
状态 离线
|
『第
5 楼』:
值得借鉴,好!
|
熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
|
|
2004-1-29 00:00 |
|
|
gotomsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『第
6 楼』:
此帖确是我一人提出的, 条理是这样的:
先是无需输入实参的,分为 适合2000 XP 2003的和98的
后是玩耍手动输入实参的, 分为一次性全部输入和一次一个地输入 (基本是都适用,除了CHOICE XP不能用外)
WILLSORT, 你好! 试了你 的方法好象不行,
你说手动输入实参没必要,但我这样做显然就是要学习测试DOS形参实参的运作过程和我们的掌握能力,以及人机交互的乐趣!
能不能解释一下 tag1=%%tag1%%*等等? 谢谢!
[此贴子已经被作者于2004-2-2 20:03:00编辑过]
|
|
2004-2-2 00:00 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
7 楼』:
Re gotomsdos:
哪个方法不行?我说手动输入没必要,是指在你的例子程序中实用性不大。
tag1=%%tag1%%* 被echo到文件中的结果就是 tag1=%tag1%*,现在明白了吗?
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2004-2-2 00:00 |
|
|
gotomsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『第
8 楼』:
就是这个 tag1=%tag1%* (这个*号什么意思?),能不能解释一下?
[此贴子已经被作者于2004-2-2 23:11:15编辑过]
|
|
2004-2-2 00:00 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
9 楼』:
Re gotomsdos:
即给变量tag1添加一个星号,星号无特别含义,只用于计数。可参见下帖:
http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=6&ID=9250
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2004-2-3 00:00 |
|