Windows Batch Scripting:解析CSV文件并提取数据

时间:2015-05-11 19:35:57

标签: windows batch-file

我是Windows批处理脚本的新手,所以原谅我的无知。我有一个CSV文件,如下所示:

ColumnA,ColumnB,ColumnC
01/02/2015,ABC,111
01/03/2015,DEF,222
01/03/2015,HHH,333
01/05/2015,XYZ,767

此文件中的行数会有所不同,但列将保持不变。我需要从最后一行的A列中提取日期列A,行1和日期。

在这种情况下,我需要提取01/02/2015和01/05/2015。接下来,我想将这两个日期存储在单独的变量中。

我怎样才能做到这一点?我不知道从哪里开始。我唯一拥有的是:

for /F "tokens=1 delims=," %%s in (IntFlow.csv) do @echo %%s

这一行代码会删除第一列并回显它。我不知道接下来会做什么。请指教。

1 个答案:

答案 0 :(得分:2)

使用for /f循环逐行解析csv文件。使用skip=1跳过标题行。如果尚未定义,则仅设置第一个变量。然后在每次循环迭代时设置最后一个变量。它迟早会被纠正,对吧? :)

@echo off
setlocal

set "first="
set "last="

for /f "skip=1 usebackq delims=," %%I in ("test.csv") do (
    if not defined first set "first=%%~I"
    set "last=%%~I"
)

echo %first%
echo %last%

tokens=1已经是默认行为。 usebackq允许您将文件名括在引号中,因此如果您的csv文件名在名称中包含空格或其他令人讨厌的字符,它应该可以使用。

我在评论中看到您决定使用PowerShell。这是一个PowerShell脚本,可让您使用日期填充变量。

$csv = ipcsv test.csv
$first = ($csv | select -first 1 | %{ $_.ColumnA })
$last = ($csv | select -last 1 | %{ $_.ColumnA })

$first
$last