sirone
Goto Top

Per Batch erste Zeile aus CSV Dateien löschen

Hallo zusammen!

Ich suche ein Batch Script, mit dem ich aus sämtlichen CSV Dateien in einem Unterordner die erste Zeile entfernen kann.

Das Script liegt also z.B. in C:\Ordner und entfernt aus allen CSV Dateien in C:\Ordner\Unterordner jeweils die erste Zeile und überschreibt diese dann einfach wieder.

Wäre super, wenn mir dabei jemand behilflich sein könnte.

Lieben Gruß
One

Content-Key: 296540

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

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

Member: sirOne
sirOne Feb 17, 2016 at 11:53:06 (UTC)
Goto Top
@echo off
for %%a in ("C:\Ordner\Unterordner\*.csv") DO (   
	more /e +1 "%%a">"%%a.tmp"    
	del "%%a" && ren "%%a.tmp" "%%a"   
)


Diese Lösung habe ich hier im Forum gefunden, allerdings erhalte ich einen Syntaxfehler und finde nicht heraus warum (-:
Member: TlBERlUS
TlBERlUS Feb 17, 2016 at 12:07:44 (UTC)
Goto Top
Hi,

nimm Powershell; Batch ist veraltet.
clear-host
$path = "C:\test"  
$file = gci -Recurse $path | ?{$_.Extension -eq ".csv"}  

Foreach ($f in $file){

    $filepath = $f.DirectoryName
    $content = gc $filepath\$f
    $content = $content[1..($content.Length -1)]
    $content | Set-Content $filepath\$f 

}
Member: sirOne
sirOne Feb 17, 2016 at 12:22:55 (UTC)
Goto Top
Hallo TlBERlUS,

vielen Dank für die Antwort! Da ich mich damit leider noch gar nicht auskenne und die batch Scripte wenigstens halbwegs verstehe wäre mir die Lösung schon lieber.
Ich wüsste gar nicht was ich mit deinem Code jetzt anfangen müsste (-:
Mitglied: 126919
126919 Feb 17, 2016 updated at 12:23:49 (UTC)
Goto Top
nimm Powershell; Batch ist veraltet.
Was sich dann aber auch auf eine Zeile abkürzen lässt face-wink
gci 'c:\Ordner\*.csv' -recurse | %{(gc $_.Fullname) | select -skip 1 | set-content $_.Fullname}
fk
Mitglied: 126919
126919 Feb 17, 2016 updated at 12:35:44 (UTC)
Goto Top
Das obige für eine Batch:
@echo off
powershell -Executionpolicy Bypass -Command "gci 'c:\Ordner\Unterordner\*.csv' -recurse | %%{(gc $_.Fullname) | select -skip 1 | set-content $_.Fullname}"  
Member: sirOne
sirOne Feb 17, 2016 at 12:43:51 (UTC)
Goto Top
Ohne jetzt vermessen sein zu wollen, würde ich mich doch freuen falls mir jemand sagen könnte wieso das oben gepostete batch script nicht funktioniert. Es scheint alles zu gehen, bis auf die Umbenennen von %%a.tmp in %%a.

Dort könnte ich dann die Ordnernamen noch durch Variablen verändern etc.
Nebenbei bekomme ich das Script in Powershell auch noch nicht zum Laufen...
Member: Biber
Solution Biber Feb 17, 2016 updated at 14:31:49 (UTC)
Goto Top
Moin sirOne,

auch ich rate zum Umstieg auf Powershell, wenn ihr es im Unternehmen einsetzen dürft.

Der Vollständigkeit halber zu den Syntaxfehlern beim obigen CMD-Batch-Schnipsel:

- Zeile 03: der Schalter /e beim more ist überflüssig, verursacht aber keinen Fehler.
- Zeile 04: der zweite Teil Ren "%%a.tmp" "%%a" wird übersetzt zu Ren "C:\x\y\test1.csv.tmp" "C:\x\y\test1.csv"
Das verursacht den Fehler, denn der renameTo-Name beim REN darf keine Pfadangabe enthalten.

Ändere also, falls du den CMD-Batch verwendest, die Zeile 04 auf
del "%%a" && ren "%%a.tmp" "%%~na"

(ungetestet, nur biooptische Grobdiagnose)

Grüße
Biber
[Edit] Upps, gerade hast du danach gefragt, da war ich am tippseln...[/Edit]
Mitglied: 114757
Solution 114757 Feb 17, 2016 updated at 14:31:46 (UTC)
Goto Top
@Biber
Dateierweiterung nicht vergessen face-smile
del "%%a" && ren "%%a.tmp" "%%~nxa"

Gruß jodel32
Member: sirOne
sirOne Feb 17, 2016 updated at 13:05:11 (UTC)
Goto Top
Vielen Dank Biber,

Unternehmen kann man sowieso nicht wirklich sagen (-:

Ich habe deinen Vorschlag jetzt geändert auf

del "%%a" && ren "%%a.tmp" "%%~na.csv"  

da in deiner Version keine Dateiendung mehr enthalten war. Damit funktioniert es aber jetzt! Danke an alle (-:


Edit: Und da kam noch die "richtige" Lösung für die Dateiendung, auch dafür danke! (-:
Member: miniversum
miniversum Feb 18, 2016 updated at 10:15:25 (UTC)
Goto Top
Zitat von @TlBERlUS:

nimm Powershell; Batch ist veraltet.

OT:
Aber es läuft auf allen (Windows) Systemen.
Hier zumindest ist Powershell auf den meisten Rechnern nicht vorhanden.
Gerade bei so Sachen wie das hier kommen mit Lösungen in Powershell oft länger und/oder überdimensioniert vor (z.B. nutze Ich doch nicht Powershell nur um eine Datei umzubenennen).
Das ist so mein persönlicher Eindruck.
Member: TlBERlUS
TlBERlUS Feb 18, 2016 at 12:32:45 (UTC)
Goto Top
Zitat von @miniversum:
Aber es läuft auf allen (Windows) Systemen.
Richtig, aber in nahezu allen Netzwerken sollte man mittlerweile Systeme verwenden, die Powershell installiert haben (IMHO)
Gerade bei so Sachen wie das hier kommen mit Lösungen in Powershell oft länger und/oder überdimensioniert vor (z.B. nutze Ich doch nicht Powershell nur um eine Datei umzubenennen).
warum nicht, die Befehle die du in eine Batch setzt, kannst du in nahezu allen Fällen auch in Powershell verwenden. Hinzu kommt, dass Powershell einfacher zu schreiben/verstehen ist. Außerdem übt das, wenn man die Powershell irgendwann doch brauchen sollte.
Das ist so mein persönlicher Eindruck.
Geht mir ähnlich face-smile
Mitglied: 114757
114757 Feb 18, 2016 updated at 16:33:32 (UTC)
Goto Top
Zitat von @miniversum:
Aber es läuft auf allen (Windows) Systemen.
Hier zumindest ist Powershell auf den meisten Rechnern nicht vorhanden.
Du verwendest noch Systeme älter als Vista X)?? Denn ab Vista ist es von Haus aus mit dabei.
Selbst XP lässt sich damit nachrüsten.
Gerade bei so Sachen wie das hier kommen mit Lösungen in Powershell oft länger und/oder überdimensioniert vor (z.B. nutze Ich doch nicht Powershell nur um eine Datei umzubenennen).
Was soll hier im Thread nur umbenannt werden? Mit der Powershell geht alles endlich in the box ohne dauernd mit Umwegen und Zusatztools hantieren zu müssen, denn mit dem NET-Framework steht einem eine komplette Programmiersprache zur Verfügung (c#-Code kompilieren und ausführen kein Problem, GUI kein Problem, etc. pp).

Wer nur auf Batch setzt hat in kommenden Windows Versionen verloren.
Nur wer noch keinen Kontakt mit der Powershell hatte meidet sie, ist wie immer... Wen einmal das PS-Fieber gepackt hat, der will keine Batch-Krücken mehr sehen.

Gruß jodel32
Member: miniversum
miniversum Feb 18, 2016 at 19:10:37 (UTC)
Goto Top
Ich habe nicht gesagt das es alte Windows Versionen sind. Ich sagte nur das es nicht vorhanden ist; absichtlich. Wir haben hier Rechner mit Mess- und Testsystemen. Da fahren wir eher die Politik nur das nötigste zu installieren. Deshalb haben wir auch Windows 8.1 ohne Powershell.

Das mit dem umbenennen wurde oben nicht erwähnt. Es war nur ein Beispiel einer einfachen Aufgabe für die ich Powershell zu überdimensioniert finde. Für andere Aufgaben die komplexer sind ist natürlich Powershell geeignetter oder VBS oder Python oder gleich ein Programm in C++.
Man wählt die Sprache nach den Bedürfnissen und nicht weil sie halt grade da ist.
Member: TlBERlUS
TlBERlUS Feb 19, 2016 at 07:45:19 (UTC)
Goto Top
Zitat von @miniversum:

Deshalb haben wir auch Windows 8.1 ohne Powershell.
Es gibt Win 8.1 ohne Powershell?
Member: miniversum
miniversum Feb 19, 2016 at 16:52:01 (UTC)
Goto Top
Man kann ja auch bei windows 8 teile entfernen.