komoran12
Goto Top

WENN-DANN für eine bestehende BATCH Datei oder Powershell

Hallo,

ich brauche mal wieder Eure Hilfe, ich komme irgendwie nicht weiter, vielleicht kann mir jemand von Euch helfen:

Derzeit benutze ich nachfolgendes Skript, um Daten aus einer .csv Datei in eine .txt Datei zu schreiben:

set quelle=%userprofile%\Temp\quelle.csv
if exist "%quelle%"  goto :prog1  
if not exist ""%quelle%"" goto :EOF  
:prog1
@echo off &setlocal
set quelle=%userprofile%\Temp\quelle.csv
set CURRENTTIME=%TIME::=.%
set ziel=%userprofile%\Temp\ziel.txt
>"%ziel%" (for /f "usebackq skip=1 delims=;" %%a in ("%quelle%") DO <nul set /p "=%%a;1;%Date%;")  

Die quelle.csv sah bisher wie folgt aus:

Nummer;Test1;Test2 
52071;72;21 
35298;70;21 
10323;51621;21

Die ziel.txt sah dann wie folgt aus:

52071;1;10.08.2017;35298;1;10.08.2017;10323;1;10.08.2017;

Jetzt würde ich gerne den Wert aus Spalte C (Test2) mit in der .txt stehen haben, allerdings gerne so, dass wenn
der Wert bspw. gleich 21, dass dann für 21 bspw. Keine weitere Angabe notwendig! steht, für wenn 22 da steht, soll am besten Weitere Angaben notwendig stehen:

52071;1;10.08.2017;Keine weitere Angabe notwendig!;35298;1;10.08.2017;Keine weitere Angabe notwendig!;10323;1;10.08.2017;Keine weitere Angabe notwendig!;

Wie kann ich das am besten umsetzen?

Content-ID: 345943

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

Ausgedruckt am: 23.11.2024 um 10:11 Uhr

Komoran12
Komoran12 11.08.2017 um 10:22:09 Uhr
Goto Top
Hat vielleicht jemand eine Idee?
Biber
Lösung Biber 11.08.2017 aktualisiert um 11:23:20 Uhr
Goto Top
Moin Komoran12,

passe folgende Zeilen an:

....
::Alte Zeile "@echo off & setlocal"  erweitern  
@echo off & setlocal enableDelayedExpansion
...
..
:: Letzte Zeile erweitern
>"%ziel%" (for /f "usebackq skip=1  tokens=1-3delims=; " %%a in ("%quelle%") DO (    
  Set "txt=x"  
  if "%%c" == "21" set "txt=info reicht"  
  if "%%c" == "22" set "txt=Hier fehlt Info"    
    <nul set /p "=%%a;1;%Date%;!txt!;"  
    ))

Anmerkung:
Zumindest in der Beispiel-CSV hast du teilweise Leerzeichen am Ende der Zeile.
Also steht nicht "21" als dritter Spaltenwert da, sondern "21 ".
Deshalb habe ich auch quick & dirty das Leerzeichen zusätzlich bei "delims=.." ergänzt, weil ich schon auf "21" oder "22" prüfen will.

Warte aber noch mit dem Markieren-als-erledigt; es wird bestimmt gleich noch eine PowerShell-Variante gepostet.

Grüße
Biber
Komoran12
Komoran12 11.08.2017 um 11:51:18 Uhr
Goto Top
Moin Biber,

mit nachfolgendem Skript teste ich das gleich mal direkt face-smile

set quelle=%userprofile%\Temp\quelle.csv
if exist "%quelle%"  goto :prog1  
if not exist ""%quelle%"" goto :EOF  
:prog1
@echo off & setlocal enableDelayedExpansion
set quelle=%userprofile%\Temp\quelle.csv
set CURRENTTIME=%TIME::=.%
set ziel=%userprofile%\Temp\ziel.txt
>"%ziel%" (for /f "usebackq skip=1  tokens=1-3delims=; " %%a in ("%quelle%") DO (    
  Set "txt=x"  
  if "%%c" == "21" set "txt=info reicht"  
  if "%%c" == "22" set "txt=Hier fehlt Info"    
    <nul set /p "=%%a;1;%Date%;!txt!;"  
    ))
Biber
Biber 11.08.2017 um 13:23:01 Uhr
Goto Top
Moin Komoran12,

nur als Anmerkung...
Ich habe in Zeile 10 geschrieben:
Set "txt=x"

.Sinnvoller wäre hier vielleicht
Set "txt=%%c"

Dann würden in der Ausgabe die "21" und "22" durch irgendeinen Text übersetzt werden und alle anderen Werte bleiben wie sie sind.

Grüße
Biber
Komoran12
Komoran12 11.08.2017 um 13:46:54 Uhr
Goto Top
Moin Biber,

ja, danke. Ich hatte hier jetzt einen festen Wert eigetragen. Habe es verstanden dass es mit "sonst" gleichgesetzt ist.