![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 12:23 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 一个简单批处理的难题 |
| 可打印版本 1,994 / 8 |
| 第1楼 walu | 发表于 2004-05-30 00:00 |
| 高级用户 发帖 201 积分 916 | |
|
一个简单批处理的难题 一个简单批处理的难题
@ECHO OFF for %%i in (c d e f g h i j ) do if exist %%i:\SYS.gho GOTO label goto err :label label %%i:SYSTEM md %%i:\boot copy aa.txt %%i:\boot goto exit :err echo nofile :exit 批处理的意思是:如果C分区存在SYS.GHO文件,就跳转到:label执行相应命令,不再继续查找其它分区,如此类推。。。。。。 但按上面的编写执行出错。不少网友给了不同的解决方案,但都没有正确的。 请willsort等高手出手! |
|
| 第2楼 haonanren | 发表于 2004-05-30 00:00 |
| 初级用户 发帖 14 积分 162 | |
|
好像没有什么问题.
|
|
| 第3楼 haonanren | 发表于 2004-05-30 00:00 |
| 初级用户 发帖 14 积分 162 | |
|
运行正确
|
|
| 第4楼 Tamm | 发表于 2004-05-30 00:00 |
| 中级用户 发帖 64 积分 397 | |
|
你的批处理出错可能是因为: %%i 离开 FOR 语句以后将失效
你可尝试这样看行不行:(未经测试,我只是提供一个思路) @ECHO OFF SET SYS= for %%i in (c d e f g h i j ) do if exist %%i:\SYS.gho SET SYS=%%i if %SYS%*==* goto err GOTO :label :label label %SYS%: SYSTEM md %SYS%:\boot copy aa.txt %SYS%:\boot goto exit :err echo nofile :exit |
|
| 第5楼 zhri | 发表于 2004-05-30 00:00 |
| 高级用户 发帖 153 积分 665 | |
|
if exist c:\SYS.GHO
。。。。。。 |
|
| 第6楼 quya | 发表于 2004-05-30 00:00 |
| 高级用户 发帖 172 积分 558 来自 江苏 | |
|
改成下面的就可以了,程序主要错在%%i 变量不能传递到 :label子程序中,所以要用一个全局环境变量%mydrive%来过渡一下。
@ECHO OFF for %%i in (c d e f g h i j ) do if exist %%i:\SYS.gho set mydrive=%%i if not defined mydrive (goto err) else (goto label) :label label %mydrive%:SYSTEM md %mydrive%:\boot copy aa.txt %mydrive%:\boot goto exit :err echo nofile :exit |
|
| 第7楼 walu | 发表于 2004-05-30 00:00 |
| 高级用户 发帖 201 积分 916 | |
|
谢谢quya兄!
在WIN 98下运行如果只有C、D分区的情况下,显示“NOT READ READING DRIVE E”。 在WIN XP是有效,但如果后面的分区有BOOT。INI文件的话,即使C分区有BOOT。INI文件,它也检测到后面的分区,而不是检测到C分区有就结束。 真希望哪位兄弟能解决这个久未解决的问题,即既能在WIN XP下运行也能在WIN 98下运行。 |
|
| 第8楼 Tamm | 发表于 2004-05-30 00:00 |
| 中级用户 发帖 64 积分 397 | |
|
再推荐一个复杂但易于操作和理解的办法:
======================== 主批处理中: ======================== @ECHO OFF CALL TestDrv.bat C D E F G H I J K L M N O P Q R S T U V W X Y Z IF %SysDrv%*==* GOTO err GOTO label :label label %SysDrv%: SYSTEM md %SysDrv%:\boot copy aa.txt %SysDrv%:\boot goto exit :err echo nofile :exit =========================== 子批处理 TestDrv.bat 内容如下: =========================== @ECHO OFF SET SysDrv= :LOOP DReady %1 IF NOT ERRORLEVEL 1 IF EXIST %1:\BOOT.INI GOTO FOUND SHIFT IF %1*==* GOTO END GOTO LOOP :FOUND SET SysDrv=%1 :END ======================== 在子批处理中使用了一个 DReady.com 是 Horst's Batch Tools 中的一个小工具。用于测试驱动器状况,返回 ERRORLEVEL 表示驱动器是否准备好。 |
|
| 第9楼 willsort | 发表于 2004-06-02 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re All:
walu兄对此系列问题的执著很令我钦佩。现将我在Email中所做的回复转贴于此,权作补遗。因为回复之前并未见到此帖,难免与各位方家观点有所重复,尚请无怪!
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |