Julius
Julius

Reputation: 17

batch script adaption with following code

I have a Batch file with the following code:

@echo off
set "quelle=C:\Users\User-01\quelle_001.txt"
set "ziel=C:\Users\User-01\ziel_001.csv"
>"%ziel%" (for /f "usebackq tokens=1-9 delims=;" %%a in ("%quelle%") DO for /L %%z in (1 1 %%i) do echo %%a;%%b;%%c;%%d;%%e;%%f;%%g;%%h;%%i;)

Input:

TEST0;TEST1;WERT1;WERT2;WERT3;WERT4;WERT5;WERT6;3;

Output:

TEST0;TEST1;WERT1;WERT2;WERT3;WERT4;WERT5;WERT6;3;
TEST0;TEST1;WERT1;WERT2;WERT3;WERT4;WERT5;WERT6;3;
TEST0;TEST1;WERT1;WERT2;WERT3;WERT4;WERT5;WERT6;3;

Now I would like to have the following Output:

TEST0;TEST1;WERT1;;;;;;3;
TEST0;TEST1;WERT2;;;;;;3;
TEST0;TEST1;WERT3;;;;;;3;

because in %%i has the value 3.

If in %%i the value is 4 the output should be:

TEST0;TEST1;WERT1;;;;;;4;
TEST0;TEST1;WERT2;;;;;;4;
TEST0;TEST1;WERT3;;;;;;4;
TEST0;TEST1;WERT4;;;;;;4;

etc.

Upvotes: 0

Views: 117

Answers (3)

Stephan
Stephan

Reputation: 56228

@echo off
SETLOCAL EnableDelayedExpansion

set "quelle=t.csv"
set "ziel=t1.csv"
>"%ziel%" (
  for /f "usebackq tokens=1,2,* delims=;" %%a in ("%quelle%") DO (
    set "i=0"
    for %%k in (%%c) do set "nr=%%k"
    for %%m in (%%c) do (
      set /a i+=1
      if !i! leq !nr! echo %%a;%%b;%%m;;;;;;!nr!;
    )
  )
)
type "%ziel%"

Input:

TEST0;TEST1;WERT1;WERT2;WERT3;WERT4;WERT5;WERT6;3;
TEST0;TEST1;WERTa;WERTb;WERTc;WERTd;WERTe;WERTf;4;

Output:

TEST0;TEST1;WERT1;;;;;;3;
TEST0;TEST1;WERT2;;;;;;3;
TEST0;TEST1;WERT3;;;;;;3;
TEST0;TEST1;WERTa;;;;;;4;
TEST0;TEST1;WERTb;;;;;;4;
TEST0;TEST1;WERTc;;;;;;4;
TEST0;TEST1;WERTd;;;;;;4;

Upvotes: 1

Compo
Compo

Reputation: 38718

This seems as if it will do what your samples show, is it what you mean?

@Set "quelle=C:\Users\User-01\quelle_001.txt"
@Set "ziel=C:\Users\User-01\ziel_001.csv"
@(For /F "UseBackQ Tokens=1-3,9 Delims=;" %%G In ("%quelle%") Do @For /F "Delims=0123456789" %%K In ("%%I") Do @For /L %%L In (1 1 %%J) Do @Echo %%G;%%H;%%K%%L;;;;;;%%J;)>"%ziel%"

Upvotes: 0

T3RR0R
T3RR0R

Reputation: 2951

@echo off
set "quelle=C:\Users\User-01\quelle_001.txt"
set "ziel=C:\Users\User-01\ziel_001.csv"
>"%ziel%" (for /f "usebackq tokens=1-9 delims=;" %%a in ("%quelle%") DO (
    echo %%a;%%b;%%c;;;;;;%%i;
    echo %%a;%%b;%%d;;;;;;%%i;
    echo %%a;%%b;%%e;;;;;;%%i;
    echo %%a;%%b;%%f;;;;;;%%i;
    echo %%a;%%b;%%g;;;;;;%%i;
    echo %%a;%%b;%%h;;;;;;%%i;
    )
)

I've removed the For /L loop as it's purpose isn't clear, and the %%z value does not get used. The only thing it appears to do is cause the same line to be echoed multiple times depending on the value of the %%i token retrieved in the first loop.

Upvotes: 0

Related Questions