Como um arquivo de lote sobrescreve o conteúdo da saída a cada vez?

0

Basicamente, eu tenho esse arquivo em lote abaixo, que retornará as primeiras x linhas do parâmetro de entrada do arquivo .csv. No entanto, o único problema agora é que esse arquivo em lotes será chamado várias vezes para criar esse arquivo de saída e continuará anexando os resultados ao arquivo de saída. Não consigo alterar o > > para > já que este é um loop for e apenas irá sobrescrever uma única linha no meu arquivo de saída, o que é incorreto. Alguém tem alguma idéia sobre como substituir o arquivo .csv saída cada vez que o arquivo em lotes é executado? Obrigado.

@echo off

if [%1] == [] goto usage
if [%2] == [] goto usage

call :print_head %1 %2
goto :eof

REM
REM print_head
REM Prints the first non-blank %1 lines in the file %2.
REM
:print_head
setlocal EnableDelayedExpansion
set /a counter=0

for /f ^"usebackq^ eol^=^

^ delims^=^" %%a in (%2) do (
        if "!counter!"=="%1" goto :eof
        @echo>>trimmed.csv %%a
        set /a counter+=1
)

goto :eof

:usage
echo Usage: head.bat COUNT FILENAME
    
por batchnoober 20.03.2013 / 17:50

2 respostas

3

Em vez de excluir o arquivo, eu preferiria substituir o arquivo por "nothing":

type NUL>trimmed.csv

Coloque em algum lugar acima do loop.

Isso cria um arquivo em branco ou sobrescreve um arquivo existente com um arquivo vazio, com o nome trimmed.csv . Como está sobrescrevendo, e não excluindo e recriando, ele deve manter a data de criação do arquivo original.

    
por 20.03.2013 / 18:32
4

Talvez seja só apagá-lo no início do lote (ou no topo da seção: print_head)?

Algo como del trimmed.csv /Q .

Dessa forma, ele é excluído na próxima execução, mas ainda é criado e anexado enquanto está executando o loop.

    
por 20.03.2013 / 17:56