moltiti
Goto Top

Ergänzen einer CSV Datei als letze Spalte mit Teil der Dateiname

ich habe ca. 12000 Dateien die im Batch Betrieb ergänzt werden sollen.

Der Aufbau der Dateien ist etwa so:

Header1; Header2; Header3
20001;10;2
20002;10;2
20003;11;0

Die Dateiname lautet "Dummy1_Dummy2_12223234_2324.csv".

Ich hätte gern den letzten Teil der Dateiname "12223234_2324" in der CSV Datei in eine weitere Spalte als letzte Spalte ergänzt. Etwa so:

Header1; Header2; Header3;Header4
20001;10;2;12223234_2324
20002;10;2;12223234_2324
20003;11;0;12223234_2324

Header4 kann auch die Nummer 12223234_2324 enthalten.

Vielen Dank schon mal für Euere Hilfe !

Content-Key: 315243

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

Ausgedruckt am: 19.03.2024 um 11:03 Uhr

Mitglied: 129813
129813 14.09.2016 aktualisiert um 21:45:55 Uhr
Goto Top
@echo off
set "folder=c:\myfiles"  
powershell -Executionpolicy Bypass -Command "gci '%folder%' -Filter *.csv -Recurse | %%{$csv = Import-csv $_.Fullname -delimiter ';'; $csv | add-member -Membertype NoteProperty -Name 'Header 4' -Value ($_.Basename.split('_',3)[2]) -Force; $csv | export-csv $_.Fullname -delimiter ';' -NoType -Encoding UTF8}"  
Regards
Mitglied: moltiti
moltiti 14.09.2016 um 20:19:15 Uhr
Goto Top
ist powershell ein tool ?
Mitglied: moltiti
moltiti 14.09.2016 um 20:28:11 Uhr
Goto Top
Es wird InputObjet abgferagt, wenn ich dort 1 eingeben, bekomme ich folgenden Fehler, was bedeutet InputObject und was kann ich dort angeben ? DANKE

Cmdlet Add-Member an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
InputObject: 1
add-member : Bei Elementen vom Typ "NoteProperty" ist der SecondValue-Parameter nicht erforderlich und sollte nicht
angegeben werden. Geben Sie keinen SecondValue-Parameter an, wenn Sie Elemente von diesem Typ hinzufügen.
In Zeile:1 Zeichen:93

back-to-top... imiter ';'; add-member $csv -Membertype NoteProperty -Name 'FileName' ...

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : InvalidOperation: (face-smile [Add-Member], InvalidOperationException
+ FullyQualifiedErrorId : Value2ShouldNotBeSpecified,Microsoft.PowerShell.Commands.AddMemberCommand


Cmdlet Add-Member an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
InputObject:
Mitglied: 129813
129813 14.09.2016 um 21:49:01 Uhr
Goto Top
Did a small correction above, sorry.
Mitglied: 77559
77559 14.09.2016 um 22:39:06 Uhr
Goto Top
Powershell ist kein Tool sondern eine mächtige Scriptsprache
mit der Linux Bash vergleichbar aber Objektorientiert.

Dieses Script unter beliebeigem Namen mit der Endung .ps1 abspeichern und in der PowerShell
ausführen [Win]+R Powershell.exe oder aus einem CMD- Fenster starten.

PS-Scripte müssen mit Pfad (ggfs .\Name) aufgerufen werden.

## Powershell script Add-Col.ps1
$Folder="C:\Test\2016-09\14 "  
Get-ChildItem $Folder -Filter dummy*.csv -Recurse |
ForEach-Object {
  $Col4 = $_.Basename.split('_',3)[2]  
  Import-Csv $_.Fullname -delimiter ';'|  
  Select-Object *,@{Name='Header 4';Expression={$Col4}} |  
  Export-Csv ($_.DirectoryName + '\New_' + $_.Name) -delimiter ';' -NoType  
}

Aus diesen Ausgangsdaten:
Dummy1_Dummy2_12223234_1234.csv
Header1; Header2; Header3
20001;10;2
20002;10;2
20003;11;0

Dummy1_Dummy2_22232345_2345.csv
Header1; Header2; Header3
20001;10;2
20002;10;2
20003;11;0

Erzeugt das Scipt dies (zur Sicherheit mit vorangestelltwem "New_")
New_Dummy1_Dummy2_12223234_1234.csv
"Header1";"Header2";"Header3";"Header 4"
"20001";"10";"2";"12223234_1234"
"20002";"10";"2";"12223234_1234"
"20003";"11";"0";"12223234_1234"

New_Dummy1_Dummy2_22232345_2345.csv
"Header1";"Header2";"Header3";"Header 4"
"20001";"10";"2";"22232345_2345"
"20002";"10";"2";"22232345_2345"
"20003";"11";"0";"22232345_2345"

Hoffe das hilft
LotPings
Mitglied: moltiti
moltiti 14.09.2016 um 23:38:02 Uhr
Goto Top
hi lotpings, danke dein script hat funktioniert. musste vorher aber die berechtigungen von powershell ändern. aktuell auf 'bypass' oder gibt es eine andere alternative.
Mitglied: moltiti
moltiti 14.09.2016 um 23:39:23 Uhr
Goto Top
thx, i try it. but not works. files are updated by the savetime but without add the name form the file. the solution from lotpings works.
Mitglied: 129813
129813 14.09.2016 aktualisiert um 23:50:52 Uhr
Goto Top
Zitat von @moltiti:

thx, i try it. but not works.
It works, tested it! This is powershell code which has to be run directly in a batch file not in a ps1.
I made it this way to make it easy for you to run it.
I think you have modified it wrong, or your powershell is not up to date.
Mitglied: moltiti
moltiti 14.09.2016 um 23:50:57 Uhr
Goto Top
i try it as a batch file. tomorrow i try it once
Mitglied: 77559
77559 15.09.2016 um 01:33:27 Uhr
Goto Top
Hallo moltiti,
ein Kompromiss ist
Set-ExecutionPolicy RemoteSigned
Gruß
LotPings
Mitglied: moltiti
moltiti 16.09.2016 um 13:48:36 Uhr
Goto Top
Danke, Output Datenmenge ist 5 gb. Da gibt's wenn
Ich es richtig verstanden habe kein Lizenz. Ich muss in csv liefern. Die eine Lösung hat gut funktioniert. In 3-4 h waren die Dateien fertig.