
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