
Ich versuche, die ersten 3 Zeilen aus 10.000 Textdateien zu entfernen. Mit:
for %f in (*.txt) do more +3 “%f” >> output.txt
Ich kann die Header entfernen und alle Dateien im Ordner zu einer neuen Datei zusammenfügen. Ich möchte die Dateien jedoch getrennt halten, nur ohne die Headerzeilen. Ist das möglich?
Antwort1
Sie können Quelldateien nicht überschreiben. Und Sie können aufgrund möglicher Überschneidungen keinen neuen Namen automatisch generieren. Sie können die Datei jedoch ohne Header in einem temporären Ordner speichern und dann über die Quelle verschieben. Das Ergebnis wird ungefähr so aussehen:
@echo off
for %%f in (*.txt) do (
more +3 "%%f" > "%TEMP%\%%f"
move /y "%TEMP%\%%f" "%%f" > nul
)
echo Done.
Oder dasselbe wie ein Befehl in der Befehlszeile:
@for %f in (*.txt) do @(more +3 "%f" > "%TEMP%\%f" && move /y "%TEMP%\%f" "%f" > nul)
Antwort2
Wenn Ihre Umgebung dies zulässt, sollten Sie die Verwendung von Powershell in Betracht ziehen, sodass Sie keine temporären Dateien und Ordner verwenden müssen.
Foreach ($file in Get-ChildItem -Path ".\" -Filter *.txt ) {
$content = Get-Content $file.FullName | Select-Object -Skip 3;
Set-Content -Path $file.FullName -Value $content;
}
Antwort3
Erstellen Sie einfach separate Dateien in einem anderen Verzeichnis.
md sub
for %f in (*.txt) do more +3 “%f” > sub\%f