Batch Script - Delete Columns in csv

Viewed 30

I do need a batch script who will remove all columns in a csv, except column 1,2 and 5

My Code:

(for /f "tokens=1,2,5 delims=;" %%i in (Input.csv) do echo %%i,%%j,%%k) > Output.csv

Input CSV

1;2;3;4;5;6;7;8;9;10
10160;"Some Name";"Something:0.8";;5;;;;;XY

Expected Output:

1;2;5
10160;"Some Name";5

Real Output

1,2,5
10160,"Some Name",XY

Does anyone have any idea why it keeps the tenth column in the second line instead of the fifth?

1 Answers
SETLOCAL ENABLEDELAYEDEXPANSION

(FOR /f "delims=" %%b IN (Input.csv) DO SET "line=%%b"&SET "line=!line:;;=; ;!"&for /f "tokens=1,2,5 delims=;" %%i in ("!line:;;=; ;!") do echo %%i,%%j,%%k)

The problem is that a sequence of delimiters is considered as a single delimiter, so you need to change each delimiter pair so that it contains a string, and repeat the operation for any remaining delimiter-pairs.

Obviously, you would need to take action to take care of a reported field that now contains a single space, and this will alter any quoted field that contains ;;

Note also that any data containing ! or % is likely to be corrupted and certain other symbols (such as &) may also yield unexpected results. If the data is restricted to alphamerics, spaces, commas, etc. it should be fine.

Related