中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 征求怎样简化DOS批处理的交互式问答??
作者:
标题: 征求怎样简化DOS批处理的交互式问答?? 上一主题 | 下一主题
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
状态 离线
『第 2 楼』:  

太难了吧

2004-1-21 00:00
查看资料  发送邮件  发短消息 网志  OICQ (327769579)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (79207959)  编辑帖子  回复  引用回复
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:

  Quote:
    set tag1=%tag1%*

即给变量tag1添加一个星号,星号无特别含义,只用于计数。可参见下帖:
    http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=6&ID=9250



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: