中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-26 01:20
47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行
DOS学习入门 & 精彩文章 (教学室) » 征求怎样简化DOS批处理的交互式问答??
可打印版本  2,048 / 8
第1楼 GOTOmsdos 发表于 2004-01-19 00:00
铂金会员 发帖 1,827 积分 5,154
征求怎样简化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! ”)
















































第2楼 Vicky26 发表于 2004-01-21 00:00
初级用户 发帖 7 积分 133
太难了吧
第3楼 willsort 发表于 2004-01-26 00:00
元老会员 发帖 1,512 积分 4,432
Re gotomsdos:

一个很不错的主题,只是感觉上像是从论坛上几个人的问答中整理出来,解释性说明太少,所以欠缺条理性。

那个一次性输入的程序,输入时其实可以不必那么麻烦。以下的程序只需要要键入程序名即可。

交互性输入的必要性其实不是很大,不过由它引出的依序赋值倒是值得探讨。


@echo off
if not == 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




第4楼 willsort 发表于 2004-01-26 00:00
元老会员 发帖 1,512 积分 4,432
Re gotomsdos:

刚才分析了一下,得出依序赋值的方案,你看一看吧,提提意见。

@echo off
echo set tag1=%%tag1%%*> tag.bat
echo set tag2=%%tag2%%*> eval.bat
echo if == 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

第5楼 Kinglion 发表于 2004-01-29 00:00
铂金会员 发帖 1,924 积分 5,798 来自 金獅電腦軟體工作室
值得借鉴,好!
第6楼 GOTOmsdos 发表于 2004-02-02 00:00
铂金会员 发帖 1,827 积分 5,154
此帖确是我一人提出的, 条理是这样的:
先是无需输入实参的,分为 适合2000 XP 2003的和98的
后是玩耍手动输入实参的, 分为一次性全部输入和一次一个地输入 (基本是都适用,除了CHOICE XP不能用外)

WILLSORT, 你好! 试了你 的方法好象不行,
你说手动输入实参没必要,但我这样做显然就是要学习测试DOS形参实参的运作过程和我们的掌握能力,以及人机交互的乐趣!

能不能解释一下 tag1=%%tag1%%*等等? 谢谢!




第7楼 willsort 发表于 2004-02-02 00:00
元老会员 发帖 1,512 积分 4,432
Re gotomsdos:

哪个方法不行?我说手动输入没必要,是指在你的例子程序中实用性不大。

tag1=%%tag1%%* 被echo到文件中的结果就是 tag1=%tag1%*,现在明白了吗?
第8楼 GOTOmsdos 发表于 2004-02-02 00:00
铂金会员 发帖 1,827 积分 5,154
就是这个 tag1=%tag1%* (这个*号什么意思?),能不能解释一下?



第9楼 willsort 发表于 2004-02-03 00:00
元老会员 发帖 1,512 积分 4,432
Re gotomsdos:

set tag1=%tag1%*

即给变量tag1添加一个星号,星号无特别含义,只用于计数。可参见下帖:
http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=6&ID=9250
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023