'read csv file through windows batch file and create txt file

I have an excel file with 5 values each in a line. now, i want to read the .csv file through batch file and create text file with the contents in the file. Example, if i have Apple, Mango in csv file (in one column), then the batch file should read this .csv file and should create a text file like " Apple is a fruit" and in next line " Mango is a fruit". Can anyone share the code please.



Solution 1:[1]

there are a lot of similar questions answered in SOF. Few of them to refer are :

Reading from a csv file and extracting certain data columns based on first column value

Help in writing a batch script to parse CSV file and output a text file

How do you loop in a Windows batch file?

Simplest answer is to loop thru your file using:

FOR %A IN (list) DO command [ parameters ]

Example:

Sample CSV:

0,1,2,4
1,1,2,3
2,2,4,6
3,3,6,9

bat file content:

for /f "usebackq tokens=1-4 delims=," %%a in ("sample1.csv") do (
      echo %%a %%b %%c %%d )

here tokens=1-4 meaning that we wish to read 4 column data for each line

Solution 2:[2]

I had thought to convert file using powershell in the FOR command but it's just much easier and simpler to get command line to parse the file itself using parameters.

@echo off rem     findstr "@SPC@" sample3.csv&& echo ERROR: source has our space encoding& goto :EOF
 for /F "tokens=*" %%a in (sample3.csv) do (
   set x_line=%%a
   set x_line=!x_line: =@SPC@!
   set x_line=!x_line:^&=@AND@!
   set x_line=!x_line:^|=@POR@!
   call :parcsv %%a& rem dangerous unless you parsed properly
 )
 goto :EOF

:parcsv
 set x_cola=%~1
 set x_colb=%~2
 set x_colc=%~3
 set x_cold=%~4
 for %%v in ( x_cola x_colb x_colc x_cold 
 ) do set %%v=!%%v:@POR@=^|!& set %%v=!%%v:@AND@=^&! set %%v=!%%v:@SPC@= !
 echo "!x_cola!"  "!x_colb!" "!x_colc!"   "!x_cold!"
 goto :EOF

This would properly handle a file with a line: 1,2,"apples,bananas",4. or used to convert comma delimited file into tab delimited etc.

Or actually on second thought it now breaks: 1,2,"orange bananas",5 and a half,6

So I needed to update FOR /F line from the original: for /F "tokens=* delims=," %%a in (sample.csv) do call :parcsv %%a So it uses an alternate character or code rather than space.

On and on 3rd review... it's really really bad because if you have "&" in a line you can break out of the bat file and hack yourself... so we would need to encode "&" and "|" and perhaps more!!! so let's go up and update those things too...

So perhaps powershell hybrid oneliner isn't so bad:

for /F "tokens=1-4 delims=  " %%a in ('powershell "import-csv sample.csv|convertto-csv -d `t"') do echo a:[%%a] b:[%%b] c:[%%c] d:[%%d]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Community
Solution 2