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

0

Estou tentando remover as primeiras 3 linhas de 10.000 arquivos de texto. Usando:

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

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

    
por ScottB 11.10.2018 / 11:02

3 respostas

2

Você não pode sobrescrever arquivos de origem. E você não pode gerar automaticamente o novo nome devido à possível sobreposição. Mas você pode salvar o arquivo sem cabeçalho na pasta temporária e movê-lo pela 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)
    
por 11.10.2018 / 12:31
2

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;
}
    
por 11.10.2018 / 15:53
1

Basta criar arquivos separados em outro diretório.

md sub
for %f in (*.txt) do more +3 “%f” > sub\%f
    
por 11.10.2018 / 11:34

Tags