Arquivo em lote ou linha de comando para remover linhas de cabeçalho de arquivos de texto

Arquivo em lote ou linha de comando para remover linhas de cabeçalho de arquivos de texto

Estou tentando remover as três primeiras linhas de 10.000 arquivos de texto. Usando:

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

Consigo remover os cabeçalhos e concatenar todos os arquivos da pasta em um novo arquivo. No entanto, gostaria de manter os arquivos separados, apenas sem as linhas de cabeçalho. Isso é possível?

Responder1

Você não pode substituir arquivos de origem. E você não pode gerar automaticamente um novo nome devido a possíveis sobreposições. Mas você pode salvar o arquivo sem cabeçalho em uma pasta temporária e movê-lo para a fonte. Será algo como:

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

Ou o mesmo que um comando na linha de comando:

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

Responder2

Se o seu ambiente permitir, considere usar o Powershell para não precisar usar arquivos e pastas temporários.

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

Responder3

Basta criar arquivos separados em outro diretório.

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

informação relacionada