我有一个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)
我是初学者。有人可以帮我吗?
答案 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