Ежедневно мы получаем пять таких файлов:

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

Числа в имени файла отличаются каждый день, но они будут одинаковыми для трех обязательных файлов. Мне нужно отправить эти три файла только в сжатую папку zip.

Я написал следующий код, но он использует первый файл несколько раз и отображает одно и то же значение пять раз:

@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  
)

Я не уверен, почему он не принимает второй файл в качестве параметра. Я пытаюсь создать массив чисел во всех пяти именах файлов, а затем сравнить эти значения массива.

Пожалуйста, помогите мне выяснить, где это не так.

1 ответ1

0

У вас есть пара мест, где вы использовали активное расширение (с разделителями % ), где вы должны были использовать отложенное расширение (с ! разделители). Исправление, которое, кажется, получает поведение, которое вы хотите:

@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  
)

Чтобы быть ясным, изменения, которые я сделал, должны:

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

изменился на:

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

а также:

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

изменился на:

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

Без этих изменений %filename% всегда расширяется до пустой строки, а %n% всегда расширяется до 0 (значение, которое было установлено при начале внешнего for ); в последнем случае это только испортило ваш вывод (вы правильно использовали !n! при присвоении vector , чтобы он имел правильные значения, просто вы печатали только первую запись, даже если вы добавили записи в последующие индексы).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .