中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-07 19:06
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 是BUG吗?长命令套到if的括号中会出错 查看 914 回复 0
楼 主 是BUG吗?长命令套到if的括号中会出错 发表于 2008-03-18 18:51 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线

>%lfdat%s.xls gawk 'BEGIN{FS=OFS="\t"} NR==FNR{a=$2;b=$3} NR^>FNR{if (FNR==1)print; else {if ($1!~/^^u\.com$^|eu\.com$/) {sum=0;sz=0;if ($2~/^^+$/){sum+=$2;sz+=1;} if ($5~/^^+$/){sum+=$5;sz+=1} if ($6~/^^+$/){sum+=$6;sz+=1} if ($7~/^^+$/){sum+=$7;sz+=1} if ($8~/^^+$/){sum+=$8;sz+=1} if ($9~/^^+$/){sum+=$9;sz+=1} if ($12~/^^+$/){sum+=$12;sz+=1} if ($13~/^^+$/){sum+=$13;sz+=1} if ($14~/^^+$/){sum+=$14;sz+=1} if ($15~/^^+$/){sum+=$15;sz+=1} if ($16~/^^+$/){sum+=$16;sz+=1} if ($17~/^^+$/){sum+=$17;sz+=1} if ($18~/^^+$/){sum+=$18;sz+=1} if ($26=="Error" ^|^| $27=="Error" {$26=a;$27=b} if (sz!=0) $54=sum/sz; if ($43~/^^$/) {$41="F";$42="F"}print}}}' al.xls %lfdat:~-8%s.bak


IF NOT %week%==星期一 goto :skipthis
>%ldate%s.xls gawk 'BEGIN{FS=OFS="\t"} NR==FNR{a=$2;b=$3} NR^>FNR{if (FNR==1)print; else {if ($1!~/^^u\.com$^|eu\.com$/) {sum=0;sz=0;if ($2~/^^+$/){sum+=$2;sz+=1;} if ($5~/^^+$/){sum+=$5;sz+=1} if ($6~/^^+$/){sum+=$6;sz+=1} if ($7~/^^+$/){sum+=$7;sz+=1} if ($8~/^^+$/){sum+=$8;sz+=1} if ($9~/^^+$/){sum+=$9;sz+=1} if ($12~/^^+$/){sum+=$12;sz+=1} if ($13~/^^+$/){sum+=$13;sz+=1} if ($14~/^^+$/){sum+=$14;sz+=1} if ($15~/^^+$/){sum+=$15;sz+=1} if ($16~/^^+$/){sum+=$16;sz+=1} if ($17~/^^+$/){sum+=$17;sz+=1} if ($18~/^^+$/){sum+=$18;sz+=1} if ($26=="Error" ^|^| $27=="Error" {$26=a;$27=b} if (sz!=0) $54=sum/sz; if ($43~/^^$/) {$41="F";$42="F"}print}}}' al.xls %ldate:~-8%s.bak

>%ldat1%s.xls gawk 'BEGIN{FS=OFS="\t"} NR==FNR{a=$2;b=$3} NR^>FNR{if (FNR==1)print; else {if ($1!~/^^u\.com$^|eu\.com$/) {sum=0;sz=0;if ($2~/^^+$/){sum+=$2;sz+=1;} if ($5~/^^+$/){sum+=$5;sz+=1} if ($6~/^^+$/){sum+=$6;sz+=1} if ($7~/^^+$/){sum+=$7;sz+=1} if ($8~/^^+$/){sum+=$8;sz+=1} if ($9~/^^+$/){sum+=$9;sz+=1} if ($12~/^^+$/){sum+=$12;sz+=1} if ($13~/^^+$/){sum+=$13;sz+=1} if ($14~/^^+$/){sum+=$14;sz+=1} if ($15~/^^+$/){sum+=$15;sz+=1} if ($16~/^^+$/){sum+=$16;sz+=1} if ($17~/^^+$/){sum+=$17;sz+=1} if ($18~/^^+$/){sum+=$18;sz+=1} if ($26=="Error" ^|^| $27=="Error" {$26=a;$27=b} if (sz!=0) $54=sum/sz; if ($43~/^^$/) {$41="F";$42="F"}print}}}' al.xls %ldat1:~-8%s.bak

:skipthis


如上,后面两个文件的处理,如果直接用IF %week%==星期一 然后括号套住,就总是会出错,提示“此时不应有print“,print位置改过多次,皆无效。后来把if的套子修改成上面那NOT并skip过就正常了。 百思不得其解,请问这个是cmd的一个bug吗?或者还是我自己没处理好呢?

另,请问上面的命令能优化吗,其作用是求某些不连续范围的格子里,将存在数据的求平均值,类似Excel里的average命令。然后将al里的部分匹配到固定列的Error的地方。

麻烦各位帮助看一下,谢谢
论坛跳转: