imagemagick 7.0.8-25 上的 .BAT 脚本创建已转换文件的日志和时间戳的问题

Problem with .BAT script on imagemagick 7.0.8-25 creating LOG of files converted and TIMESTAMPS

我正在编写一个脚本,即使在子文件夹中也能找到数千个图像文件,(我有不同类型的 mogrify 语句,针对不同的类型)应该创建一个 .log 文件并插入所有内容在那里,包括当前日期和时间。

所以这是我的问题,我无法让它工作,我会尝试很多事情来做到这一点,我几乎阅读了所有关于它的主题,但我找不到我的错误,而且调试器没有对我说什么。

我的批处理文件是:

@ECHO OFF
SET LOGFILE=comprimir.log
call :LOG > %LOGFILE%
exit /B
:LOG
FOR /r "C:\imagemagick\image" %a in (*.jpg) do
mogrify -quality 90 -interlace PLANE -sampling-factor 4:2:0 -compress 
JPEG2000 -colorspace RGB "%~a"
ECHO %DATE% %TIME%

但是出了点问题,当我尝试执行时出现了这个错误:

"Is not expected in this moment"

为什么会出现此错误?

当您在批处理文件中时,您应该使用 %%A 而不是您使用的 %A。另外,你的括号在哪里?

另一个问题是您在代码块中(for 循环)并且您正在使用 %DATE%%TIME% 而没有 delayed expansion。这行不通。

所以,我建议:

@echo off
setlocal EnableDelayedExpansion

set "logfile=comprimir.log"
(call :log)>%logfile%
exit /B

:log
for /R "C:\imagemagick\image" %%A in (*.jpg) do (
    mogrify -quality 90 -interlace PLANE -sampling-factor 4:2:0 -compress JPEG2000 -colorspace RGB "%%~A"
    echo !date! !time!
)

直接从 cmdline,我们使用 % 但在批处理文件中,我们需要加倍使用它们 %%。也不必调用label,直接pipe log一下就可以了。

@echo off
setlocal enabledelayedexpansion
set "log=comprimir.log"
(for /r "C:\imagemagick\image" %%a in (*.jpg) do (
    mogrify -quality 90 -interlace PLANE -sampling-factor 4:2:0 -compress JPEG2000 -colorspace RGB "%%~a"
    echo !date! !time!
 )
)>>%log%