freshman2017
Goto Top

Batch - Zeilen anhand bestimmten Wert duplizieren

Guten Morgen,

mit nachfolgendem Skript kann ich aufgrund der Werte aus der letzten Spalte die Zeilen duplizieren:

@echo off
SETLOCAL EnableDelayedExpansion

set "source=C:\Users\User01\Files\source.csv"  
set "target=C:\Users\User01\Files\target.csv"  

>"%target%" (  
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,* delims=;" %%a in ("%source%") DO (  
set "z=0"  
for %%s in (%%k) do set "nr=%%s"  
for %%u in (%%k) do (
set /a i+=1
if !i! leq !nr! echo %%a;%%b;%%c;%%d;%%e;%%f;%%g;%%h;%%i;%%j;%%u;;;;;;;;;;;;;;;!nr!;
)
)
)
type "%target%"  

Source-File ist wie folgt:

VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;1A;2B;3C;4;5;6;7;8;9;10;11;12;13;14;15;

Target-File wie folgt:

VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;1A;;;;;;;;;;;;;;;5;
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;2B;;;;;;;;;;;;;;;5;
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;3C;;;;;;;;;;;;;;;5;
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;4;;;;;;;;;;;;;;;5;
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;5;;;;;;;;;;;;;;;5;

Meine Source-File hat einen neuen Aufbau bekommen:

VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;1A;2B;3C;4;5;6;7;8;9;10;11;12;13;14;15;1.00;2.00;3.00;4.00;5.00;6.00;7.00;8.00;9.00;10.00;11.00;12.00;13.00;14.00;15.00;5;

Jetzt weiß ich nicht, wie ich mit oben dargestellten Skript das ganze anpassen kann, dass ich folgendes Target-File bekomme:
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;1A;1.00;;;;;;;;;;;;;;;5;
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;2B;2.00;;;;;;;;;;;;;;;5;
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;3C;3.00;;;;;;;;;;;;;;;5;
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;4;4.00;;;;;;;;;;;;;;;5;
VALUE1;VALUE2;VALUE3;VALUE4;VALUE5;VALUE6;VALUE7;VALUE8;VALUE9;VALUE10;5;5.00;;;;;;;;;;;;;;;5;
Kann mir da jemand helfen?

Beste Grüße!

Content-Key: 592035

Url: https://administrator.de/contentid/592035

Printed on: April 25, 2024 at 09:04 o'clock

Mitglied: 145033
Solution 145033 Jul 30, 2020 updated at 11:29:59 (UTC)
Goto Top
Watt für'n "Quarkformat" face-big-smile

Mit der PS
gc 'C:\Users\User01\Files\source.csv' | %{  
    $cols = $_.split(";")  
    1..$cols[-2]| %{
        "$($cols[0..9] -join ';');$($cols[(9+$_)] -join ';');$($cols[(24+$_)] -join ';');;;;;;;;;;;;;;;$($cols[-2]);"  
    }
} | sc "C:\Users\User01\Files\target.csv"  
Member: freshman2017
freshman2017 Jul 30, 2020 at 13:59:44 (UTC)
Goto Top
Leider bekomme ich eine Fehlermeldung, dass der Pfad unter gc nicht gefunden werden kann. Woran kann es liegen?
Mitglied: 145033
145033 Jul 30, 2020 updated at 14:03:38 (UTC)
Goto Top
Zitat von @freshman2017:

Leider bekomme ich eine Fehlermeldung, dass der Pfad unter gc nicht gefunden werden kann. Woran kann es liegen?
Zu wenig Rechte oder ein Tippfehler. Das ist Powershell, nur so nebenbei falls du das nicht gesehen haben solltest.
Läuft hier einwandfrei, mit deinen Daten getestet!
Member: freshman2017
freshman2017 Jul 31, 2020 updated at 11:39:53 (UTC)
Goto Top
Super, vielen lieben Dank - es klappt einwandfrei vielen Dank.

Eine kleine Frage habe ich noch - ich möchte den Befehl gerne per Batch einbinden - kenne es aus der Vergangenheit, dass ich:

powershell -Executionpolicy ByPass -Command
verwenden kann.

Wenn ich jetzt die Batch ausführen:

powershell -Executionpolicy ByPass  Command ggc 'C:\Users\User01\Files\source.csv' | %{  
    $cols = $_.split(";")  
    1..$cols[-2]| %{
        "$($cols[0..9] -join ';');$($cols[(9+$_)] -join ';');$($cols[(24+$_)] -join ';');;;;;;;;;;;;;;;$($cols[-2]);"  
    }
} | sc "C:\Users\User01\Files\target.csv"  

fehlen mir vermutlich noch irgendwelche Trenner.

Aber vielen lieben Dank schonmal.
Mitglied: 145033
145033 Jul 31, 2020 at 12:34:32 (UTC)
Goto Top
powershell -EP ByPass -C "gc 'C:\Users\User01\Files\source.csv' | %%{$cols = $_.split(';');1..$cols[-2] | %%{\"$($cols[0..9] -join ';');$($cols[(9+$_)] -join ';');$($cols[(24+$_)] -join ';');;;;;;;;;;;;;;;$($cols[-2]);\"}} | sc 'C:\Users\User01\Files\target.csv'"