如何从.csv文件获取第二行第二列?

时间:2019-01-21 18:13:22

标签: batch-file

我有一个CSV文件,看起来类似于以下内容:

Order ID,Order Date,Ship Date,Ship Mode
CA-2011-103800,2013-01-03,2013-01-07 00:00:00,Standard Class
CA-2011-112326,2013-01-04,2013-01-08 00:00:00,Standard Class

我需要做的就是从第一个数据行获取订单日期,在这种情况下就是2013-01-03

我尝试了下面的代码无法解决问题。

set file=output.csv
for /f "skip=1 tokens=2 delims=," %%A in (%file%) do (echo %%A)

我是初学者。有人可以帮我吗?

3 个答案:

答案 0 :(得分:2)

通过从file.csv的数据中创建一个数组,可以非常容易地做到这一点。通过使用!Line[2]!,我们可以获取所需的.csv文件的任何行。只需根据需要更改行和列配置。这对于搜索.csv文件非常有用。

@echo off
@setlocal enabledelayedexpansion

Rem | Row & Column Information
Set "Row=2"
Set "Column=2"

Rem | Turn Lines To Array Strings
for /f "tokens=* delims=" %%A in ('Type file.csv') do (
    set /a "count+=1"
    set "Line[!count!]=%%A"
)

Rem | Grab Second Column From Second Row
for /f "tokens=%Column% delims=," %%A in ('Echo !Line[%Row%]!') do (
    set "Data=%%A"
)

Echo Second Row, Second Column Data: %Data%

我留下了新的Rem笔记来帮助您进行脚本编写。

答案 1 :(得分:2)

只是为了好玩,这是另一种选择。您可以将csv文件重定向到包含两个set /P语句的循环中-一个语句消耗第一行,第二个语句将变量设置为第二行。然后对于捕获的行,使用可变子串替换除去*和,*。

@echo off & setlocal
(
    set /P "="
    set /P "val="
) < "output.csv"

set "val=%val:*,=%"
echo %val:,=&rem;%

但是,实际上,您尝试的解决方案几乎是正确的。所有需要做的就是在第一次迭代后跳出循环。

@echo off & setlocal
set "file=output.csv"
for /f "usebackq skip=1 tokens=2 delims=," %%A in ("%file%") do echo %%A && exit /b

答案 2 :(得分:0)

每次使用more命令时,都会跳过第一行,而每次只需获取第二个令牌即可。

仅获取第一个值:

@echo off
set "file=output.csv"
for /f "tokens=2 delims=," %%i in ('type order.txt ^| more +1') do echo %%i & goto next
:next
pause

或获取第二列的值:

@echo off
set "file=output.csv"
for /f "tokens=2 delims=," %%i in ('type %file% ^| more +1') do echo %%i
pause