나는 문제가이 배치 파일로 무엇인지 몰라 :가시성 그 안에 변수를 설정
생각 만하는 경우는, 디렉토리에 다른 이미지를 처리해야한다는 것입니다@ECHO OFF
SET images=./images/
SET cdr=%CD%
SET result=noval
CD %images%
SET images=
:: Density
SET dpi=300
:: Process SVG
FOR %%x IN (%images%*.svg) DO (
CALL:testFun %%~nx result
echo res "%result%"
IF [%result%]==[process] (
ECHO Converting %%x
inkscape -d %dpi% -A %images%%%~nx.pdf %images%%%x
) ELSE (ECHO - Skiping %%x, file is uptodate.)
)
:: Process BMP, JPG, PNG, and TIFF
FOR %%x IN (%images%*.jpg,%images%*.bmp,%images%*.png,%images%*.tiff) DO (
CALL:testFun %%~nx result
echo res "%result%"
IF [%result%]==[process] (
ECHO Converting %%x
inkscape -d %dpi% -A %images%%%~nx.pdf %images%%%x
) ELSE (ECHO - Skiping %%x, file is uptodate.)
)
:: Process EPS
FOR %%x IN (%images%*.eps) DO (
CALL :testFun %%~nx result
echo res "%result%"
IF [%result%]==[process] (
ECHO Converting %%x
epstopdf --outfile=%images%%%~nx.pdf %images%%%x
) ELSE (ECHO - Skiping %%x, file is uptodate.)
)
CD %cdr%
ECHO.&PAUSE&GOTO:EOF
::Functions
:testFun
SET "file=%1"
FOR /F %%f IN ('dir /Od /B "%file%.*"') DO (SET newest=%%~xf)
echo * Newest file for %file%: %newest%
IF [%newest%]==[.pdf] (echo noprocessing
GOTO :noprocess) ELSE (echo processing
GOTO :process)
:noprocess
SET result=noprocess
GOTO :endfun
:process
SET result=process
:endfun
GOTO:EOF
이미지 (소스)가 결과 PDF (출력)보다 새로운 것입니다.
그러나 내가 왜 그런 일이 일어나고 있는지 알 수없는 몇 가지 문제가 있습니다. 우선
는 상기 제 1 루프는
result
값 인쇄noval
모든 시간을 사용하고,이 함수 호출을 건너 뛰는 것 같습니다. 그런 다음 동일한 호출 방법이 두 번째 및 세 번째 루프에서 작동합니다.두 번째, 함수 내에서 변경된
result
의 값은 없습니다 (첫 번째 문제가 발생하지 않음). 범위가 다른 것과 같습니다. 그러나 전역 변수로 사용하고 있습니다. 나는set local
을 사용하여이 버전을 테스트하고 변수를 참조로 전달하지만 아무 것도 작동하지 않습니다.
내가 뭘 잘못하고있는 거지?