![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-06 22:52 |
共 48,040 主题排行 / 350,125 发帖 / 今日 1 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]批量处理文件的写法 |
| 可打印版本 1,846 / 16 |
| 第1楼 dwing | 发表于 2007-12-17 18:36 |
| 初级用户 发帖 32 积分 177 | |
|
[求助]批量处理文件的写法 我写了一个exe程序可以对一个txt文件处理,处理正确返回0,处理错误返回-1.
我要对当前目录所有txt文件全部做处理,如果至少有一个处理错误,最后显示"error!",否则显示"ok!". 如何用bat批处理实现? 我写了一个,结果不正确,能修正一下也可以: @echo off set err=0 for %%a in (*.txt) do ( dotxt %%a if %errorlevel% equ -1 set err=1 ) if %err% equ 0 goto ok echo error! goto end :ok echo ok! :end set err= |
|
| 第2楼 fastslz | 发表于 2007-12-17 18:56 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
未测试
更简洁点 |
|
| 第3楼 26933062 | 发表于 2007-12-17 19:16 |
| 银牌会员 发帖 879 积分 2,268 | |
|
楼主是要求,至少有一个处理错误,最后显示"error!",否则显示"ok!".
是否要这样? 开启延迟变量试试. : |
|
| 第4楼 dwing | 发表于 2007-12-18 10:10 |
| 初级用户 发帖 32 积分 177 | |
|
感谢fastslz, 学到了用"||"代替errorlevel的用法.
但需要略作修改才能正常运行.就是for不能加"/d"参数,否则一个文件都没处理. 3楼的代码没能正常运行,总是显示"error!". 这样的批处理太有用了,以后再写以单文件为单位的文件处理程序就只考虑一个文件就可以了,不用再考虑通配符. |
|
| 第5楼 dwing | 发表于 2007-12-18 10:54 |
| 初级用户 发帖 32 积分 177 | |
|
忽然又发现问题了:
@echo off setlocal set err=0 for %%a in (*.txt) do dotxt %%a || set /a err=%err%+1 echo 错误文件数:%err% 没有错误时,可以显示"错误文件数:0". 但无论出现几个错误,都显示"错误文件数:1", 这是为什么? |
|
| 第6楼 everest79 | 发表于 2007-12-18 11:17 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
嘿嘿
set num=0 for %%a in (*.txt) do ( dotxt %%a call set /a num+=%%errorlevel%% ) set/a 1/num&&echo err %num:~1%||echo ok |
|
| 第7楼 dwing | 发表于 2007-12-18 13:40 |
| 初级用户 发帖 32 积分 177 | |
|
楼上的写法也不错.
只不过一般程序的返回值都设定为<0表示错误,而不一定是-1. 而call命令后面可以接set却不能接if, ()里的语句还被看作是一行的, 批处理语言设计的真糟糕... |
|
| 第8楼 dwing | 发表于 2007-12-18 13:51 |
| 初级用户 发帖 32 积分 177 | |
|
哈哈...这样写就得到正确结果了:
@echo off setlocal set err=0 for %%a in (*.txt) do dotxt %%a || set /a err+=1 echo 错误文件数:%err% 感谢楼上几位支持! |
|
| 第9楼 everest79 | 发表于 2007-12-18 13:52 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
额,我是看你说不成功返回-1
()不是被看作一行的,而是看作一个命令集 我不是学编程的,批处理语言的主要作用还是直观,完全可以通过示例代码来让人轻松掌握而不需要去了解编程语言的基础概念 |
|
| 第10楼 huahua0919 | 发表于 2007-12-18 14:37 |
| 银牌会员 发帖 780 积分 1,608 | |
Originally posted by dwing at 2007-12-18 01:51 PM: 这个估计还是不行吧,和你上面的没什么区别啊 应该改成!err! 不知可否? |
|
| 第11楼 dwing | 发表于 2007-12-18 15:16 |
| 初级用户 发帖 32 积分 177 | |
Originally posted by huahua0919 at 2007-12-18 14:37: 与上面的写法当然有区别,一个是"set /a err=%err%+1",一个是"set /a err+=1" 这两句在for语句中是有区别的(糟糕的批处理语言 ).我已经测试多次"echo %err%"的写法均得到正确结果,平台是WinXP(sp2).也许与DOS/Win9x的批处理有区别. |
|
| 第12楼 front | 发表于 2007-12-18 20:41 |
| 新手上路 发帖 4 积分 8 来自 福建 | |
|
set /a err=%err%+1",一个是"set /a err+=1是同一个意思,不是用不同的方式表达而已set .a err+=1就是简便
|
|
| 第13楼 dwing | 发表于 2007-12-18 21:52 |
| 初级用户 发帖 32 积分 177 | |
Originally posted by front at 2007-12-18 20:41: 你试一下这个批处理(统计当前目录文件数),就知道区别了: @echo off setlocal set num=0 for %%a in (*) do set /a num+=1 echo %num% set num=0 for %%a in (*) do set /a num=%num%+1 echo %num% |
|
| 第14楼 everest79 | 发表于 2007-12-18 22:19 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
set /a的运算特性在部分情况下不需要延缓支持就可以实时刷新
|
|
| 第15楼 honghunter | 发表于 2007-12-18 23:31 |
| 中级用户 发帖 135 积分 321 | |
|
为什么很多人都喜欢开启延迟变量哪?
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |