[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样实现文本行处理每一行对比一个文件?

背景:
   我在MS SQL SERVER 2005 的一个数据库中为每一个表生成的一个.csv 的文件 (表名.csv)。然后生成的一个总的表记录表名和记录数(rowcount.csv 表名||记录数);  

我现在想做一个BAT从我的这个总表(rowcount.csv)取出每一行记录利用表名去找我生成的表名.csv,计算出这个.csv的记录数,然后对比这个数与rowcount.csv取出的这个表的记录数是否相等,如果不相等调用运行MS SQL SERVER 2005 中的存储过程(pro_表名),直到运行3次都还不成功,那么在rowcount.csv 运行下一行;


谢谢各位;

  1. @Echo Off
  2. For /F "tokens=1,2 delims=|" %%a In (rowcount.csv) Do (
  3.   Set "Flag="
  4.   For /F "delims=:" %%c In ('Findstr /n .* "%%a"') Do If "%%b" EQU "%%c" Set "Flag=a"
  5.   If Not Defined Flag (
  6.       For /L %%d In (1,1,3) Do (
  7.         If Not Defined Flag (
  8.           Start /wait "" "这里自己写SQL的语句"
  9.           For /F "delims=:" %%e In ('Findstr /n .* "%%a"') Do If "%%b" EQU "%%e" Set "Flag=a"
  10.          )
  11.        )
  12.     )
  13. )
复制代码
一路飘过的鸟~~~

TOP

2# ArdentMan


谢谢您!

有可能我描述的不够详细;
1. 这个是我的ROWCOUNT.csv里边的记录;
ADJUSTDETAIL||35936
DB||2001299

2.
生成的ADJUSTDETAIL.csv,DB.csv

我就想写一个bat读ROWCOUNT.csv逐行记录,来给我的文件ADJUSTDETAIL.csv,DB.cs 的记录条数相对比,如果与rowcount.csv读取记录||后面数据与生成的表的.csv不相等,则循环执行我的procedure再生成表名.csv;直到循环3次;

例如:rowcount.csv的第一条记录ADJUSTDETAIL||35936, 记录好表名ADJUSTDETAIL.然后利用这样的ADJUSTDETAIL 表名,去查找ADJUSTDETAIL.csv,统计ADJUSTDETAIL.csv的记录条数与读取rowcount.csv(ADJUSTDETAIL||35936) 35936 是否相等,相等则运行下一条记录DB||2001299,如果不相等,则运行我的procedure再生成ADJUSTDETAIL.csv 再次判断记录条数是否相,如果相等则下一次记录,如果不相等,则再次生成ADJUSTDETAIL.csv直到运行3次。运行3次后,不管记录数是否相等,运行ROWCOUNT.csv的下一条记录;

TOP

本帖最后由 ArdentMan 于 2011-7-19 19:52 编辑

请看看我的代码是不是你描述的意思,上面没注意你文件名没加.csv后缀:
  1. @Echo Off
  2. For /F "tokens=1,2 delims=|" %%a In (rowcount.csv) Do (
  3.   Set "Flag="
  4.   For /F "delims=:" %%c In ('Findstr /n .* "%%a.csv"') Do If "%%b" EQU "%%c" Set "Flag=a"
  5.   If Not Defined Flag (
  6.       For /L %%d In (1,1,3) Do (
  7.         If Not Defined Flag (
  8.           Start /wait 这里自己写出SQL运行procedure的语句,我不知道的
  9.           For /F "delims=:" %%e In ('Findstr /n .* "%%a.csv"') Do If "%%b" EQU "%%e" Set "Flag=a"
  10.          )
  11.        )
  12.     )
  13. )
复制代码
一路飘过的鸟~~~

TOP

4# ArdentMan


好的,谢谢哈;我明天测试一下;

TOP

4# ArdentMan


我看了一个,我有两个疑问:

麻烦你说一下;
1. 就是从rowcount.csv读出来的的数值,在那里给我从表名.csv里计算出来的数值进行的对比;
2. 接着1说,如果值不相等,那么我要运行3次,这个是在那里实现的?

3.第二个for 是不要括号 For /F "delims=:" %%c In ('Findstr /n .* "%%a.csv"') Do (  ?
4.For /L %%d In (1,1,3)  这里的1,1,3指的是?

谢谢

TOP

6# tiandehui


系统自带的帮助里面有讲解
FOR /L %variable IN (start,step,end) DO command [command-parameters]

    The set is a sequence of numbers from start to end, by step amount.
    So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would
    generate the sequence (5 4 3 2 1)

TOP

返回列表