我不知道这个批处理文件有什么问题:
@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(输出)新时。
但是,有几个问题我不知道为什么会发生。
首先,第一个循环一直使用
result
和 print的值noval
,看起来它正在跳过函数调用。但是,相同的调用方式适用于第二个和第三个循环。其次,在其他循环中(没有出现第一个问题)
result
,在函数内部更改的 的值不存在。好像范围不同。但是,我将它用作全局变量,对吗?set local
我使用变量作为参考来测试这个版本,但没有任何效果。
我在这里做错了什么或错过了什么?