파일 이름에 따라 파일 압축


0

매일 우리는 다음과 같은 5 개의 파일을받습니다 :

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  
)

왜 두 번째 파일을 매개 변수로 사용하지 않는지 잘 모르겠습니다. 다섯 개의 파일 이름 모두에 숫자 배열을 만들고 그 배열 값을 비교하려고합니다.

문제가 발생한 곳을 찾도록 도와주세요.


둘 다 코드에서 나 설명에서 명확하지 않습니다 무엇을 당신이 압축 할 3 개 파일. 첫 번째 for /f파일은 파일을 열거하는 데 사용하고 세 번째 파일이 잘못 배치되어 필요하지 않은 것처럼 보입니다. / f의 수달 밖에 있어야합니다.
LotPings

답변:


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했으므로 올바른 값을 가졌으므로 후속 색인에 항목을 추가 한 경우에도 첫 번째 항목 만 인쇄 한 것입니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.