为什么这个批处理代码运行错误(对于/ f)

时间:2014-06-25 02:41:11

标签: batch-file csv

我有一个未按预期运行的批处理代码。

以下是代码:

@echo off

FOR /F "eol=- tokens=1-11 delims=," %%A IN (1.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (2.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (3.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (10.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (111.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (112.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (113.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (114.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (121.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (122.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
FOR /F "eol=- tokens=1-11 delims=," %%A IN (123.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv

结果是来自1.csv的流程项目然后跳过2.csv3.csv并直接转到10.csv111.csv112.csv113.csv114.csv121.csv122.csv123.csv

修改

所以这就是事情;我在尝试上面的代码之前就这样做了。

  1. 我创建了一个文件名为6038000006.csv的空文件。

  2. 我运行了这段代码:

    @echo off
    
    FOR /F "eol=- tokens=1-11 delims=," %%A IN (1.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
    
  3. 6038000006.csv充满了数据(实际上数据的日期为{1.csv是一年中的第一季度,2.csv是一年中的第二季度]所以我很确定它的顺序。)

  4. 然后我再次运行此代码,编辑1.csv成为2.csv

    @echo off
    
    FOR /F "eol=- tokens=1-11 delims=," %%A IN (2.csv) DO IF %%D==6038000006 ECHO %%A,%%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K >> 6038000006.csv
    
  5. 由于代码>>会在文件底部附加数据。我不认为它重叠,而是附加到最后的数据。

  6. 我重复4号,直到我完成123.csv

  7. 在重复运行结束时,6038000006.csv包含从文件1.csv到文件123.csv的所有已过滤数据。

  8. 现在我想,如果可以整合来自1.csv的代码而不是单行提示我编写代码(当然我将6038000006.csv转移到其他地方并创建了一个“新”代码此实验代码的空白6038000006.csv(与上述相同))。

  9. 但是,结果是来自2.csv3.csv的数据未反映在新6038000006.csv上。

1 个答案:

答案 0 :(得分:0)

首先,您需要弄清楚它是否实际跳过文件(您不支持此争用,所以我们不确定是什么让您认为这样)。使用以下内容评论echo off

rem @echo off

然后运行它。执行命令应在执行前进行回显。

其次,检查“跳过”的文件实际是否第四列为6038000006的某些行。可能是它们没有被跳过,而是没有所需的数据。

另一种选择是插入:

dir 6038000006.csv

在每个for循环后查看文件的更改方式。