Script de morcego para um conjunto de arquivos csv em uma pasta

1

Como armazenar um valor em uma variável e carregar essa variável como uma nova coluna em um arquivo usando um script em lote?

O link acima é usado para ler um campo de data e gravá-lo em todos os registros em um arquivo csv. Eu quero que isso seja feito para um conjunto de arquivos csv em uma pasta. Abaixo está o script para o requisito, eu quero saber qual é o erro no script abaixo

@echo off 
setlocal if exist three.txt del three.txt 
set cnt=1 rem get the date "01/12/15" 
for %%i in (*.csv) do ( 
if cnt>=1 ( 
for /f "skip=5 tokens=1-10 usebackq delims=," %%a in (type "%%i") do ( 
set _date=%%d 
goto :next 
) 
:next 
rem add the date to the end of every line and output to "three.txt" 
for /f "tokens=* usebackq" %%a in (type "%%i") do ( 
echo %%a,%_date%>> three.txt 
) 
) 
set /a cnt+=1 
) 
endlocal
    
por user2500677 11.05.2016 / 11:04

1 resposta

0

Eu quero que isso seja feito para um conjunto de arquivos csv em uma pasta

Mais uma vez, o arquivo de lote é dividido de várias maneiras diferentes.

Você precisa aprender como depurar seus próprios arquivos em lote:

Em vez de perder tempo com a depuração de seu arquivo de lote, é mais rápido modificar o arquivo de lote da minha resposta para a pergunta vinculada para responder à sua nova pergunta.

Use o seguinte arquivo de lote (example.cmd):

@echo off 
setlocal 
if exist three.txt del three.txt 
for /r %%i in (*.csv) do ( 
  call :process_file %%i
  )
goto :eof

:process_file
  echo processing %1
  for /f "skip=5 tokens=1-10 usebackq delims=," %%a in ('type %1') do ( 
    set _date=%%d 
    goto :next 
  )
:next 
  rem add the date to the end of every line and output to "three.txt" 
  for /f "tokens=* usebackq" %%a in ('type %1') do ( 
    echo %%a,%_date%>> three.txt 
    )
  ) 
endlocal

Como escrevo os resultados para o mesmo arquivo csv em vez do três.txt?

Use o seguinte arquivo de lote (example.cmd):

@echo off 
setlocal 
for /r %%i in (*.csv) do ( 
  call :process_file %%i
  )
goto :eof

:process_file
  echo processing %1
  for /f "skip=5 tokens=1-10 usebackq delims=," %%a in ('type %1') do ( 
    set _date=%%d 
    goto :next 
  )
:next 
  rem add the date to the end of every line and output to "three.txt" 
  for /f "tokens=* usebackq" %%a in ('type %1') do ( 
    echo %%a,%_date%>> three.txt 
    )
  )

  rem rename the file
  del %~nx1
  ren three.txt %~nx1 
endlocal

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • ligue - chame um programa em lotes de outro, ou chame uma sub-rotina.
    • del - Exclua um ou mais arquivos.
  • para / f - Comando Loop contra os resultados de outro comando.
  • para / r - Fazer um loop pelos arquivos (criar subpastas).
  • ir para - Direcione um programa em lotes para ir para uma linha rotulada.
  • parâmetros - Um argumento de linha de comando (ou parâmetro) é qualquer valor passado para um script em lote.
  • ren - Renomeie um arquivo ou arquivos.
  • tipo - Exibe o conteúdo de um ou mais arquivos de texto.
por 11.05.2016 / 11:31