中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助]FOR 迴圈跳出問題 上一主题 | 下一主题
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『楼 主』:  [求助]FOR 迴圈跳出問題

請問到最後會出現找不到檔案的的狀況
這樣子該如何修改呢?
我是參考
http://www.cn-dos.net/forum/viewthread.php?tid=41630&fpage=2
lxmxn教的方法不過改起來怪怪的^^"
請幫忙一下
謝謝!

目的:
我是希望當執行到最後一個安裝程序後跳出
因為我不知道怎麼判斷哪些已安裝

所以就將此批處理方在啟動內
採安裝過後刪除INSTALL.BAT的方式
安裝一個批處理完畢後重新開機
當所有INSTALL.BAT刪除後
刪除自身批處理

批處理內容
@echo off
@color 9f  
setlocal enabledelayedexpansion

set ZPahtZ=MIS

set DB-1=DB-1-Chip.ini
set DB-2=DB-2-Display.ini
set DB-3=DB-3-Audio.ini
set DB-4=
set DB-5=
set DB-9=DB-9-Vendor.ini

for %%a in (1,2,3) do call:loop %%a
echo all finishUP

:loop
set ZLocalDirsZ=%SystemDrive%\%ZPahtZ%\!DB-%~1:~3,-4!
if exist %ZLocalDirsZ%\Install.bat (
call %ZLocalDirsZ%\Install.bat
::Start shutdown -f -r -t 60
del %ZLocalDirsZ%\Install.bat

) else (
echo %~1
)
goto :eof
goto loop

echo all finish Down
結果:
C:\>for %a in (1 2 3) do call:loop %a

C:\>call:loop 1

C:\>set ZLocalDirsZ=C:\MIS\!DB-1:~3,-4!

C:\>if exist C:\MIS\1-Chip\Install.bat (
call C:\MIS\1-Chip\Install.bat
del C:\MIS\1-Chip\Install.bat
)  else (echo 1 )
1

C:\>goto :eof

C:\>call:loop 2

C:\>set ZLocalDirsZ=C:\MIS\!DB-2:~3,-4!

C:\>if exist C:\MIS\2-Display\Install.bat (
call C:\MIS\2-Display\Install.bat
del C:\MIS\2-Display\Install.bat
)  else (echo 2 )
2

C:\>goto :eof

C:\>call:loop 3

C:\>set ZLocalDirsZ=C:\MIS\!DB-3:~3,-4!

C:\>if exist C:\MIS\3-Audio\Install.bat (
call C:\MIS\3-Audio\Install.bat
del C:\MIS\3-Audio\Install.bat
)  else (echo 3 )
3

C:\>goto :eof

C:\>echo all finishUP
all finishUP

C:\>set ZLocalDirsZ=C:\MIS\!DB-:~3,-4!

C:\>if exist C:\MIS\~3 -4\Install.bat (

C:\>call C:\MIS\~3,-4\Install.bat
'C:\MIS\~3' 不是內部或外部命令、
可執行的程式或批次檔。

C:\>del C:\MIS\~3,-4\Install.bat
系統找不到指定的檔案。

C:\>echo
ECHO 已啟動。

C:\>goto :eof


2008-7-25 14:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
obsolete
初级用户





积分 192
发帖 72
注册 2005-7-31
状态 离线
『第 2 楼』:  

好像是echo all finishUP后少了goto :eof

2008-7-25 20:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by obsolete at 2008-7-25 08:37 PM:
好像是echo all finishUP后少了goto :eof

您好若在 echo all finishUP 加上 goto :eof
後整個程序就結束@@a
不管是echo all finishUP 或是 echo all finishDown 都不會執行到了^^"

不過還是謝謝^^
C:\Test>set ZPahtZ=MIS

C:\Test>set DB-1=DB-1-Chip.ini

C:\Test>set DB-2=DB-2-Display.ini

C:\Test>set DB-3=DB-3-Audio.ini

C:\Test>for %a in (1 2 3) do call:loop %a

C:\Test>call:loop 1

C:\Test>set ZLocalDirsZ=C:\MIS\!DB-1:~3,-4!

C:\Test>if exist C:\MIS\1-Chip\Install.bat (
call C:\MIS\1-Chip\Install.bat
del C:\MIS\1-Chip\Install.bat
)  else (echo 1 )
1

C:\Test>goto :eof

C:\Test>call:loop 2

C:\Test>set ZLocalDirsZ=C:\MIS\!DB-2:~3,-4!

C:\Test>if exist C:\MIS\2-Display\Install.bat (
call C:\MIS\2-Display\Install.bat
del C:\MIS\2-Display\Install.bat
)  else (echo 2 )
2

C:\Test>goto :eof

C:\Test>call:loop 3

C:\Test>set ZLocalDirsZ=C:\MIS\!DB-3:~3,-4!

C:\Test>if exist C:\MIS\3-Audio\Install.bat (
call C:\MIS\3-Audio\Install.bat
del C:\MIS\3-Audio\Install.bat
)  else (echo 3 )
3

C:\Test>goto :eof

C:\Test>goto :eof

C:\Test>


2008-7-26 01:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
obsolete
初级用户





积分 192
发帖 72
注册 2005-7-31
状态 离线
『第 4 楼』:  

你好,我也是新手,下面我说说自己的看法^^

P调用标签的结构基本是这样的
:: echo before a call
call :label arguments
:: echo after a call
goto :eof

:label
:: echo in proc
goto :eof
也就是调用标签的“主程序”应该以goto :eof结束,避免顺序执行到其下的“子程序”。
所以
1. echo all finishUP后少了goto :eof

2. 这里的goto loop不会被执行到
goto :eof
goto loop
连续的两个非条件goto是没有意义的

3. echo all finish Down不在“主程序”中,也不在“子程序”中,所以它不会被执行到。
不明白为什么你要以下两句:
echo all finishUP
echo all finish Down
表示程序结束,一句就可以了。

[ Last edited by obsolete on 2008-7-26 at 10:05 AM ]

2008-7-26 09:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by obsolete at 2008-7-26 09:54 AM:
你好,我也是新手,下面我说说自己的看法^^

P调用标签的结构基本是这样的
[code]
:: echo before a call
call :label arguments
:: echo after a call
goto :eof

:la ...

那兩句是沒有特別的意義
只是想知道當它執行完後LOOP後想知道接下他程序會繼續往哪走
這樣子我才能將接下來的語法往下寫

因為我實在看不出來到子程序會在哪邊結束><
只好弄一UP 與 DOWN 直接測試
不過它都跳不出子程序

謝謝您的解釋^^

那我就把剩下的語法直接加到
goto :eof
echo all finishUP
之上好了^^

[ Last edited by XZ on 2008-7-26 at 11:21 AM ]

2008-7-26 11:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: