pausenbrotnascher
Goto Top

CSV Manipulation Batch oder PS

Guten Morgen allerseits,

ich bin zwar neu in diesem Forum, möchte mich aber künftig in der Community einfinden, aber wie jeder User habe ich zunächst eine Frage, womit ich dringend Hilfe benötige, da ich absolut auf dem Schlauch stehe.

Ausgangssituation:
Ich benötige ein Batch oder Powershell Script, welches eine CSV einliest und in einer Spalte (C,3) die Kommas entfernt, da in der restlichen Datei keine Kommas entfernt werden dürfen. Mein Delimiter ist hierbei ";".

Ich habe bereits Ansätze versucht, komme aber leider nie zu dem gewünschten Ergebnis, auch unter dem Gesichtspunkt, dass ich immer wieder was ändere und schaue was mir die generierte CSV ausspuckt, bisher aber leider nichts was ich verarbeiten könnte:

@echo off
SETLOCAL enabledelayedexpansion

REM Quellpfad
SET "quell_datei=count_export.csv"  

REM Zielpfad
SET "ziel_datei=count_export_final.csv"  

REM diese Zeichenfolge wird gesucht : Kommata
SET "suchen_nach=,"  

REM Funde werden ersetzt durch : nix / überschrieben / Komma wird entfernt
SET "ersetzen_durch="  

REM Hinweis wenn suchen_nach nicht gesetzt wurde
IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof)

REM Lösche Zieldatei, falls bereits vorhanden
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL)


REM Quelldatei zeilenweise auslesen und in Variable "zeile" schreiben  
for /f "usebackq tokens=1-3 delims=;" %%i in ('findstr /n "," "count_export.csv"') do @(  
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :weiter

:ersetzen
REM Inhalt von 'suchen_nach' suchen + "ersetzen_durch" durchführen  
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%!

REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben  
IF [!zeile!] EQU  (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)
GOTO :eof

Oder bin ich mit meinem bisherigen Fortschritt völlig auf dem Holzweg ?

Viele Grüße und Danke im Voraus

PS: Leider bin ich mit Powershell noch ungeübter und hoffe dass ihr mir das verzeihen könnt. Würde auch einen Kaffee spendieren, wenn mir jemand nettes der mir hilft face-smile

Content-Key: 640478

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: 147069
Lösung 147069 14.01.2021 aktualisiert um 10:09:08 Uhr
Goto Top
Pfade/Dateinamen und den Spaltennamen in Zeile 2 an deine Bedürfnisse anpassen
Powershell:
$csv = Import-CSV '.\datei.csv' -Delimiter ";"  
$csv | %{$_.'ÜberschriftDerSpalte3' = $_.'ÜberschriftDerSpalte3' -replace ','}  
$csv | export-csv '.\datei_neu.csv' -Delimiter ";" -NoType -Encoding UTF8  
Mitglied: pausenbrotnascher
pausenbrotnascher 14.01.2021 aktualisiert um 11:15:33 Uhr
Goto Top
Super, vielen Dank das hat astrein funktioniert. Aber noch eine letzte Frage. Wenn ich das Script aufrufe werde ich immer gefragt ob ich das einmal ausführen oder Ablehnen will, dabei soll das Script aber einmal pro Stunde via Aufgabenplanung starten. Wie kann ich das dauerhaft akzeptieren ?

Gruß
Mitglied: 147069
147069 14.01.2021 aktualisiert um 11:14:53 Uhr
Goto Top
Du musst die Skriptausführung einmalig über die Executionpolicy in einer elevated Powershell freischalten.
Set-Executionpolicy RemoteSigned
https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell. ...
Oder alternativ das Skript über Bypass aufrufen
powershell -EP Bypass -File "D:\script.ps1"  
Gruß bw.
Mitglied: pausenbrotnascher
pausenbrotnascher 14.01.2021 um 11:16:11 Uhr
Goto Top
Ja stimmt, ich hatte das schon nachgeschaut und mit Bypass hat es geklappt. Stellt das dahingehend ein Sicherheitsrisiko dar ?

Viele Grüße
Mitglied: 147069
147069 14.01.2021 aktualisiert um 11:26:03 Uhr
Goto Top
Zitat von @pausenbrotnascher:
Ja stimmt, ich hatte das schon nachgeschaut und mit Bypass hat es geklappt. Stellt das dahingehend ein Sicherheitsrisiko dar ?
Mit generellen Änderung der Policy natürlich auch. Wenn du dein Skript auch für andere bearbeitbar ablegst und das ganze mit nem elevated Account machst dann ja face-wink. Was für Auswirkungen die verschiedenen Einstellungen haben steht oben im Link. Denke immer an das Stichwort "Least Privilege". Also nur die Rechte verwenden die absolut nötig für das Ausführen der Aufgabe sind.

p.s. Danke auch nochmal für den Kaffee ! 👍

Bleib gesund.
bw.
Mitglied: pausenbrotnascher
pausenbrotnascher 14.01.2021 um 12:07:28 Uhr
Goto Top
Okay ja das habe ich mir gedacht. Ich werde mich damit auch noch mal in Ruhe auseinandersetzen. Momentan ist der Server so oder so nicht von außen erreichbar. Aber dennoch heißt das ja nicht, dass man da die Sicherheit vernachlässigen kann.

Gerne, das hast Du Dir redlich verdient und bleib auch gesund !

Gruß