楼 主
关于强制程序退出
发表于 2006-07-07 15:14 · 中国 北京 联通
初级用户
★
积分 120
发帖 32
注册 2006-06-19 16:31
20年会员
UID 57256
状态 离线
@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窗口,显得不太友好.
请教的问题:
如果出错,如何打印出错误信息后,返回到命令行窗口。
第 2 楼
发表于 2006-07-07 15:39 · 中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
第 3 楼
发表于 2006-07-07 15:51 · 中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
20年会员
UID 43784
来自 北京
状态 离线
哦,这样啊,把:ERROR下面的GOTO :EOF更换成 EXIT /B试试............嘎嘎.........
第 4 楼
发表于 2006-07-07 16:07 · 中国 北京 联通
初级用户
★
积分 120
发帖 32
注册 2006-06-19 16:31
20年会员
UID 57256
状态 离线
呵呵,谢谢fastslz,除了tee之外没有什么其他的解决方法了么?
第 5 楼
发表于 2006-07-07 16:11 · 中国 北京 联通
初级用户
★
积分 120
发帖 32
注册 2006-06-19 16:31
20年会员
UID 57256
状态 离线
to bagpipe:
试过这个方法,虽然最终能返回命令行,但是for循环仍然继续执行,没有中止。
第 6 楼
发表于 2006-07-07 16:19 · 中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
我不理解goto :EOF什么意思,所以.....不好说
- @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 end
- :error
- rem 显示错误信息
- goto end
- :end
DOS一跟葱:发表于 2006-07-07 16:16
[
Last edited by fastslz on 2006-7-7 at 16:24 ]
第 7 楼
发表于 2006-07-07 16:36 · 中国 北京 联通
初级用户
★
积分 120
发帖 32
注册 2006-06-19 16:31
20年会员
UID 57256
状态 离线
to fastslz: 谢谢你的回复。
是我在上面的帖子中没说清楚,这里澄清一下。
当出现copy出错时,希望不再执行后面的动作,也就是退出for 循环,一直没有找到好的方法.
第 8 楼
发表于 2006-07-07 18:25 · 中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
据我所知for肯定是循环,就不能单独列出来后COPY吗?bagpipe高手都没法我更不行。或者把你的要求和要达到的目的说一下,看你的批处理越看越没头绪,毕竟每个人的思路都不一样。
另外fileList.txt的内容是固定的吗?
第 9 楼
发表于 2006-07-07 19:39 · 中国 北京 联通
初级用户
★
积分 120
发帖 32
注册 2006-06-19 16:31
20年会员
UID 57256
状态 离线
fileList.txt中的内容不是固定的,我所要实现的功能是批处理拷贝某文件中记录的一系列文件,过程中有一个文件拷贝出错,文件拷贝过程将中止,程序退出。
谢谢
[ Last edited by qdcr on 2006-7-7 at 19:42 ]
第 10 楼
发表于 2006-07-07 20:01 · 中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
20年会员
UID 53056
状态 离线
你干吗还在 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 ]
第 11 楼
发表于 2006-07-07 21:51 · 中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
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
第 12 楼
发表于 2006-07-10 13:19 · 中国 北京 联通
初级用户
★
积分 120
发帖 32
注册 2006-06-19 16:31
20年会员
UID 57256
状态 离线
这样的退出是关闭整个cmd窗口了,不太友好,希望能够返回cmd窗口而不是关闭。
第 13 楼
发表于 2006-07-10 16:55 · IANA 局域网IP(Private-Use)
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
20年会员
UID 42173
性别 男
状态 离线
要返回就运行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'>"
第 14 楼
发表于 2006-07-10 17:17 · 中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
20年会员
UID 43784
来自 北京
状态 离线
第 15 楼
发表于 2006-07-27 04:32 · 中国 广东 中山 广东瑞江科技有限公司BGP数据中心
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
20年会员
UID 43709
性别 男
状态 离线
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一定要加上,不然很可能会导致程序死循环.
论坛跳转: