中国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 楼』:  

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 楼』:  

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
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: