中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 关于强制程序退出 上一主题 | 下一主题
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『楼 主』:  关于强制程序退出

@echo off
for /f %%i in (fileList.txt) do call :copyFile "%%i"

pause

:copyFile
copy "%~1" E:\
if errorlevel 1 echo Copy File Failed. && goto error
if errorlevel 0 echo Copy File "%~1" succeed.
goto :EOF

:error
goto :EOF

fileList.txt的内容为:
E:\test\1.bmp
E:\test\22.bmp(此文件不存在)
E:\test\3.bmp

希望程序在遇到错误后能中止运行,而上面的代码是遇到错误后,打印错误信息并继续执行。如果在error后面用exit的话,则是关闭dos窗口,显得不太友好.

请教的问题:
如果出错,如何打印出错误信息后,返回到命令行窗口。

2006-7-7 15:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 2 楼』:  

借助TEE,详见下列帖子

http://www.cn-dos.net/forum/view ... 1&highlight=tee

2006-7-7 15:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 3 楼』:  

哦,这样啊,把:ERROR下面的GOTO :EOF更换成 EXIT /B试试............嘎嘎.........

2006-7-7 15:51
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 4 楼』:  

呵呵,谢谢fastslz,除了tee之外没有什么其他的解决方法了么?

2006-7-7 16:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 5 楼』:  

to bagpipe:
试过这个方法,虽然最终能返回命令行,但是for循环仍然继续执行,没有中止。

2006-7-7 16:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  

我不理解goto :EOF什么意思,所以.....不好说


  1. @echo off
  2. for /f %%i in (fileList.txt) do call :copyFile "%%i"
  3. pause
  4. :copyFile
  5. copy "%~1" E:\
  6. if errorlevel 1 echo Copy File Failed. && goto error
  7. if errorlevel 0 echo Copy File "%~1" succeed.
  8. goto end
  9. :error
  10. rem 显示错误信息
  11. goto end
  12. :end
        DOS一跟葱:发表于 2006-07-07  16:16

[ Last edited by fastslz on 2006-7-7 at 16:24 ]

2006-7-7 16:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 7 楼』:  

to fastslz: 谢谢你的回复。
是我在上面的帖子中没说清楚,这里澄清一下。
当出现copy出错时,希望不再执行后面的动作,也就是退出for 循环,一直没有找到好的方法.

2006-7-7 16:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 8 楼』:  

据我所知for肯定是循环,就不能单独列出来后COPY吗?bagpipe高手都没法我更不行。或者把你的要求和要达到的目的说一下,看你的批处理越看越没头绪,毕竟每个人的思路都不一样。
另外fileList.txt的内容是固定的吗?

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





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 9 楼』:  

fileList.txt中的内容不是固定的,我所要实现的功能是批处理拷贝某文件中记录的一系列文件,过程中有一个文件拷贝出错,文件拷贝过程将中止,程序退出。
谢谢

[ Last edited by qdcr on 2006-7-7 at 19:42 ]

   此帖被 +8 点积分        点击查看详情   


2006-7-7 19:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 10 楼』:  

你干吗还在 error的标号后 执行goto :eof

这本身就被包含在for的循环中了 你当然跳不出来
@echo off
for /f %%i in (fileList.txt) do call :copyFile "%%i"

:endfor
pause >nul
exit

:copyFile
copy "%~1" E:\
if errorlevel 0 (echo Copy File "%~1" succeed.) else (echo Copy FileFailed.)&& goto endfor
goto :EOF
这样就跳出下一个循环了 你可以在endfor后继续执行其他命令了

[ Last edited by kcdsw on 2006-7-7 at 20:08 ]

   此帖被 +8 点积分        点击查看详情   


2006-7-7 20:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 11 楼』:  

10楼kcdsw的改成if errorlevel 1 从for循环中跳出来了,强......
@echo off
for /f %%i in (fileList.txt) do call :copyFile "%%i"

:endfor
pause >nul
exit

:copyFile
copy "%~1" E:\
if errorlevel 1 (echo Copy File "%~1" succeed.) else (echo Copy FileFailed.)&& goto endfor
goto :EOF


2006-7-7 21:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 12 楼』:  

这样的退出是关闭整个cmd窗口了,不太友好,希望能够返回cmd窗口而不是关闭。

2006-7-10 13:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 13 楼』:  

要返回就运行cmd




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-7-10 16:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 14 楼』:  

真TMD不好伺候,,,EST我们就别管了

2006-7-10 17:17
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
voiL
中级用户





积分 384
发帖 189
注册 2005-10-19
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by qdcr at 2006-7-10 13:19:
这样的退出是关闭整个cmd窗口了,不太友好,希望能够返回cmd窗口而不是关闭。

要想调用BAT文件本身,在开头先SET批处理自身的路径
@echo off
cls
set mypath=%0
注:cls有助于清除上次运行的信息,当然,如果你是有意让它显示的话可以删除掉.

然后在最后可以在error后面加入
%mypath% & exit
来实现.

再注:%mypath%后面的exit一定要加上,不然很可能会导致程序死循环.

2006-7-27 04:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: