Csv for循环中未清除输出缓冲区
我正在编写一个程序,从CSV文件中读取主机和IP列表,该文件根据列的值运行不同的代码。但是,将结果输出到文件时,参数似乎不会刷新 CSV文件(test.CSV) 批处理脚本(loop.bat) 使用loop.bat test.csv在CMD中运行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
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
这里有多个问题:
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
)