Csv for循环中未清除输出缓冲区

Csv for循环中未清除输出缓冲区,csv,batch-file,cmd,Csv,Batch File,Cmd,我正在编写一个程序,从CSV文件中读取主机和IP列表,该文件根据列的值运行不同的代码。但是,将结果输出到文件时,参数似乎不会刷新 CSV文件(test.CSV) 批处理脚本(loop.bat) 使用loop.bat test.csv在CMD中运行 FOR /F "skip=1 tokens=1-6 delims=," %%A IN (%1) DO ( if %%F == "Primary" do ( echo Name is %%A ec

我正在编写一个程序,从CSV文件中读取主机和IP列表,该文件根据列的值运行不同的代码。但是,将结果输出到文件时,参数似乎不会刷新

CSV文件(test.CSV)

批处理脚本(loop.bat) 使用loop.bat test.csv在CMD中运行

FOR /F "skip=1 tokens=1-6 delims=," %%A IN (%1) DO (    

    if %%F == "Primary" do
    (
        echo Name is %%A
        echo Primary IP is %%D
    )>Primary.txt

    if %%F == "Secondary" do
    (
        echo name is %%A
        echo Primary IP is %%D and Secondary IP is %%E
    )>Secondary.txt


    )
Primary.txt的输出 Primary.txt应该是IP为10.1.1.2的ObjA

name is ObjB
Primary IP is 10.1.1.3
Secondary.txt的输出 但是Secondary.txt输出是正确的

name is ObjB
Primary IP is 10.1.1.3 and Secondary IP is 10.1.2.2
这里有多个问题:

  • 您的CSV格式不正确,ObjA行中缺少一个逗号。此外,您应该省略每行的最后一个逗号:

    Name,FieldA,FieldB,PrimaryIP,SecondaryIP,Type
    ObjA,ABC,DEF,10.1.1.2,[NULL],Primary
    ObjB,GHI,JKL,10.1.1.3,10.1.2.2,Secondary
    
  • 连续两个逗号无效(请参阅)

  • 如果
    条件不起作用,则需要用引号将其括起来
  • 如果
    语法错误,则必须清除
    do

    if "%%F" == "Primary" (
    
  • 总而言之:

    Name,FieldA,FieldB,PrimaryIP,SecondaryIP,Type
    ObjA,ABC,DEF,10.1.1.2,[NULL],Primary
    ObjB,GHI,JKL,10.1.1.3,10.1.2.2,Secondary
    

    嗯,
    如果%%F==“Primary”do
    如果%%F==“Secondary”do
    都是无效行,原因不止一个。如果传递的文件参数中有空格,并且示例
    .csv
    内容的格式不正确,则
    FOR
    命令将失败。原始脚本运行时没有问题,我只是简单地修改了它,因为实际代码包含与我正在执行的产品相关的信息。我在每个if条件中都包含了echo,以确保代码块正在执行。唯一的问题是文本文件的输出与预期的输出不匹配。我唯一的假设是,文件只在for循环的末尾写入,因此缓冲区可能会卡在csvt的第二个条目上。如果传递的file参数中有空格,则
    for
    命令将失败。它将尝试分析字符串,而不是文件。
    FOR/F“skip=1 tokens=1-6 delims=,“%%a IN('TYPE“%~1”)DO(
    Name,FieldA,FieldB,PrimaryIP,SecondaryIP,Type
    ObjA,ABC,DEF,10.1.1.2,[NULL],Primary
    ObjB,GHI,JKL,10.1.1.3,10.1.2.2,Secondary
    
    @echo off
    FOR /F "skip=1 tokens=1-6 delims=," %%A IN (%1) DO (
    
        if "%%F" == "Primary" (
            echo Name is %%A
            echo Primary IP is %%D
        )>Primary.txt
    
        if "%%F" == "Secondary" (
            echo name is %%A
            echo Primary IP is %%D and Secondary IP is %%E
        )>Secondary.txt
    )