2016-10-27 4 views
-2

지정된 디렉토리를 검색하고 파일 마스크와 일치하는 파일을 찾으려고합니다. Teal * csv 그런 다음이를 변수에 할당하십시오. 파일 확장자가없는 경우) Perl 스크립트의 매개 변수에서 해당 변수를 참조하십시오.파일 이름을 찾고, 변수에 할당하고, 배치 파일에 변수가있는 perl 스크립트를 실행하십시오.

set FILEPATH=\\DBserver\files\outgoing\Temp\Teal*.csv 
for /F "delims=" %%A in ("%FILEPATH%") do (
    set "FILEFULLNAME=%%~nxA" 
    set "FILEMASK=%%~nA" 
    set "FILEEXT=%%~xA" 
) 

perl \\DBserver\scripts\splitfileFINAL.pl \\DBserver\files\outgoing\Temp\%FILEFULLNAME 300000 %FILEMASK 

펄 스크립트는 3 개 개의 매개 변수가 있습니다 : 1 파일을 분할하는, %varname%를 사용하는

+0

마지막 줄'\\ DBserver \ ... '는 스크립트의 일부입니까? '% FILEFULLNAME % '대신'% FILEFULLNAME %'을 (를) 의미하셨습니까?'FILEMASK '에 대해서도 마찬가지입니까? – aschipfl

답변

0

배치 변수의 값을 참조하려면, 당신이 필요로하는 파일 확장자가없는 파일 3 파일 이름 당 행의 두번째 번호, 그러므로

... %FILEFULLNAME% 300000 %FILEMASK% 

변수가 올바르게 설정되어 있으면 (unstated) 문제를 해결해야합니다.

0

Magoo가 대답 한 바에 따르면 확장하려는 경우 Magoo가 환경 변수의 양쪽 끝에 %을 넣어야합니다.

그러나 폴더의 파일을 반복하려면 FOR/F가 아닌 간단한 FOR를 사용하고 싶습니다.

또한 왜 환경 변수가 필요한지 알지 못합니다. FOR 변수를 직접 사용하면됩니다.

마지막으로 %% A에는 전체 경로가 포함됩니다. 루프의 본문에 파일 경로를 하드 코딩 할 필요가 없습니다.

@echo off 
set "SCRIPT=\\DBserver\scripts\splitfileFINAL.pl" 
set "FILEPATH=\\DBserver\files\outgoing\Temp\Teal*.csv" 
for %%A in ("%FILEPATH%") do perl "%SCRIPT%" "%%F" 300000 "%%~nA" 

당신의 펄 스크립트 같은 폴더 내에서 추가 CSV 파일을 만드는 경우

후 그 새 파일은 잠재적 FOR 루프에 의해 선택 될 수있다. 이 경우 FOR/F로 전환하고 DIR 명령을 처리하여 처리가 시작되기 전에 전체 파일 목록이 버퍼링되도록해야합니다. 이제 전체 경로가 %% A에 나열되지 않으므로 본문 내에 포함해야합니다.

@echo off 
set "SCRIPT=\\DBserver\scripts\splitfileFINAL.pl" 
set "FILEPATH=\\DBserver\files\outgoing\Temp\" 
set "FILEMASK=Teal*.csv" 
for /f "delims=" %%A in ('dir /b /a-d "%FILEPATH%%FILEMASK%") do (
    perl "%SCRIPT%" "%FILEMASK%%%A" 300000 "%%~nA" 
) 
+0

감사합니다. 내가 고민하고있는 가장 큰 일은 파일을 찾는 방법이다. 파일 이름은 하루에 증가합니다. * (Teal * .csv)가있는 곳은 현재 날짜 또는 파일의 날짜입니다. 나는이 파일을 해체하여 내 FTP 클라이언트가 내 웹 사이트로 가져 오도록 노력하고 있습니다. 해당 디렉토리에서 Teal_20161027.csv와 같은 파일을 찾은 다음 배치 스크립트에서 그 파일을 분할하도록 배치 스크립트를 가져올 수 있습니까? – kadagreatish

관련 문제