Zipando arquivos de acordo com nomes de arquivos

0

Diariamente recebemos cinco arquivos assim:

vi_250000364846.dqa_report.xlsx em vi_250000364846.3553_report em vi_250000364846.MSR_report em vi_250000364857.3553_report em vi_250000364857.dqa_report.xlsx

Os números no nome do arquivo diferem a cada dia, mas eles serão os mesmos para os três arquivos necessários. Preciso enviar esses três arquivos apenas para uma pasta zip compactada.

Eu escrevi o seguinte código, mas ele está usando o primeiro arquivo várias vezes e exibe o mesmo valor cinco vezes:

@echo on  
set LOGFILE=batch.log  
call :LOG > %LOGFILE%  
exit /B  

:LOG  
setlocal EnableDelayedExpansion  
set n=0  
set count=0  
set vector[%n%]=0  
for /f "tokens=* delims=." %%i in ('dir /b /a-d "C:\Test"') do (  
set filename=%%i  
for /f "tokens=2 delims=_." %%a in ("%filename%") do (  
   set vector[!n!]=%%a  
  for /f "tokens=* delims==" %%v in ('set vector[%n%]')  do @echo %%v  
)  
 set /A n+=1  
)

Não sei por que não está tomando o segundo arquivo como parâmetro. Estou tentando criar uma matriz dos números em todos os cinco nomes de arquivos e, em seguida, comparar esses valores de matriz.

Por favor, ajude-me a descobrir onde está dando errado.

    
por Guest 18.07.2018 / 09:31

1 resposta

0

Você tem alguns lugares em que usou a expansão rápida (com % delimitadores) onde deveria ter usado a expansão atrasada (com ! delimitadores). Correção que parece obter o comportamento desejado:

@echo on  
set LOGFILE=batch.log  
call :LOG > %LOGFILE%  
exit /B  

:LOG  
setlocal EnableDelayedExpansion  
set n=0  
set count=0  
set vector[%n%]=0  
for /f "tokens=* delims=." %%i in ('dir /b /a-d "C:\Test"') do (  
set filename=%%i  
for /f "tokens=2 delims=_." %%a in ("!filename!") do (  
   set vector[!n!]=%%a  
  for /f "tokens=* delims==" %%v in ('set vector[!n!]')  do @echo %%v  
)  
 set /A n+=1  
)

Para ser claro, as alterações que fiz foram:

for /f "tokens=2 delims=_." %%a in ("%filename%") do (  

alterado para:

for /f "tokens=2 delims=_." %%a in ("!filename!") do (  

e:

for /f "tokens=* delims==" %%v in ('set vector[%n%]')  do @echo %%v  

alterado para:

for /f "tokens=* delims==" %%v in ('set vector[!n!]')  do @echo %%v  

Sem essas alterações, %filename% está sempre expandindo para a sequência vazia e %n% está sempre expandindo para 0 (o valor que foi definido quando a% externafor começou); no último caso, isso apenas estragou sua saída (você usou corretamente !n! ao atribuir a vector , por isso tinha os valores corretos, apenas imprimiu a primeira entrada mesmo quando adicionou entradas em índices subsequentes ).

    
por 18.07.2018 / 19:05