将批处理脚本应用于我的目录的所有csv文件

时间:2016-07-07 14:05:11

标签: windows csv batch-file cmd

我有一个脚本,允许我从csv文件中提取特定列。 我的目标主题是将我的脚本应用于我的目录中的所有csv文件。

@echo off>fourcol.csv

setlocal 

for /f "tokens=1-22* delims=," %%1 in (ManyColumns.csv) do (

    echo %%4,%%5,%%6>>fourcol.csv
)

type fourcol.csv
  1. 将脚本应用于我的目录中的所有csv文件

  2. 删除重复项

  3.   

    FileA.csv ... FileZ.csv

         

    server1的,戴尔,1.0.1,server1的,戴尔,28/06/2016,...

         

    服务器2,HP,1.0.2,服务器2,HP,29/06/2016,...

         

    服务器3,戴尔,1.2.1,服务器3,戴尔,30/06/2016,...

         

    服务器4,HP,1.3.1,服务器4,HP,27/06/2016,...

         

    服务器3,戴尔,1.2.1,服务器3,戴尔,30/06/2016,...

         

    服务器4,HP,1.3.1,服务器4,HP,27/06/2016,...

    我的CSV文件具有相同的标题和相同的数据。

    应用脚本后的输出(无重复):

      

    server1的,戴尔,1.0.1

         

    服务器2,HP,1.0.2

         

    服务器3,戴尔,1.2.1

         

    服务器4,HP,1.3.1

1 个答案:

答案 0 :(得分:0)

如何将脚本应用于我的目录中的所有csv文件?

应该做一些小改动:

  1. 不要将数字用作for循环变量。它们保留用于命令行参数。

  2. 使用dir /b *.csv获取要处理的文件列表。

  3. 从令牌1 令牌4开始,提取前三列。

  4. 使用第一个for循环处理每个文件,使用第二个(嵌套的)for循环来处理文件中的行。

  5. 注意:

    • delims=,可能无法执行您想要的操作(如果文件中包含逗号,的值)。

    尝试以下批处理文件(test.cmd):

    @echo off
    setlocal
    rem remove output file if it already exists
    if exist fourcol.csv del fourcol.csv
    rem loop through the csv files
    for /f "usebackq" %%a in (`dir /b *.csv`) do (
      rem loop through the lines in each file
      for /f "usebackq tokens=1,2,3 delims=," %%b in (%%a) do (
        echo %%b,%%c,%%d>>fourcol.csv
        )
      )
    rem add code here to strip duplicates
    endlocal
    

    test.csv:

    server1,Dell,1.0.1,server1,Dell,28/06/2016,...
    server2,Hp,1.0.2,server2,Hp,29/06/2016,...
    server3,Dell,1.2.1,server3,Dell,30/06/2016,...
    server4,Hp,1.3.1,server4,Hp,27/06/2016,...
    server3,Dell,1.2.1,server3,Dell,30/06/2016,...
    server4,Hp,1.3.1,server4,Hp,27/06/2016,...
    

    fourcol.csv:

    server1,Dell,1.0.1
    server2,Hp,1.0.2
    server3,Dell,1.2.1
    server4,Hp,1.3.1
    server3,Dell,1.2.1
    server4,Hp,1.3.1
    

    进一步阅读