Archivo por lotes o línea de comando para eliminar líneas de encabezado de archivos de texto

Archivo por lotes o línea de comando para eliminar líneas de encabezado de archivos de texto

Estoy intentando eliminar las primeras 3 líneas de 10.000 archivos de texto. Usando:

for %f in (*.txt) do more +3 “%f” >> output.txt

Puedo eliminar los encabezados y concatenar todos los archivos de la carpeta en un archivo nuevo. Sin embargo, me gustaría mantener los archivos separados, solo que sin las líneas de encabezado. es posible?

Respuesta1

No puede sobrescribir archivos fuente. Y no puede generar automáticamente un nuevo nombre debido a una posible superposición. Pero puedes guardar el archivo sin encabezado en una carpeta temporal y luego moverlo a la fuente. Será algo como:

@echo off
for %%f in (*.txt) do (
    more +3 "%%f" > "%TEMP%\%%f"
    move /y "%TEMP%\%%f" "%%f" > nul
)
echo Done.

O lo mismo que un comando en la línea de comando:

@for %f in (*.txt) do @(more +3 "%f" > "%TEMP%\%f" && move /y "%TEMP%\%f" "%f" > nul)

Respuesta2

Si su entorno lo permite, considere usar Powershell para no necesitar usar archivos y carpetas temporales.

Foreach ($file in Get-ChildItem -Path ".\" -Filter *.txt ) {
    $content = Get-Content $file.FullName | Select-Object -Skip 3;
    Set-Content -Path $file.FullName -Value $content;
}

Respuesta3

Simplemente cree archivos separados en otro directorio.

md sub
for %f in (*.txt) do more +3 “%f” > sub\%f

información relacionada