批量 FOR 循环不起作用

批量 FOR 循环不起作用

因此,我正在尝试执行一个目录中的图像转换过程,但它根本无法运行,而且我无法看到批处理代码中有什么错误:

FOR /R %a in (*.png) DO (
    files\pngnq -s 1 -n 16 %~fa 
    ren *nq8.png "%~na.png"
    files\gimconv "%~na.png" --format_style psp --format_endian little --pixel_order faster --image_format index4
    del "%~na.png"
    )

它输出的错误是法语“in was not expected”(in était inattendu)。

编辑:这是原始代码(工作代码):

set file=*.png
files\pngnq -s 1 -n 16 %file% 
ren *nq8.png 12345.png
files\gimconv 12345.png --format_style psp --format_endian little --pixel_order faster --image_format index4
del 12345.png
ren *.gim READY4BIT.gim

答案1

我看不出我的批处理代码中有什么错误:

FOR /R %a in (*.png) DO (
    files\pngnq -s 1 -n 16 %~fa 
    ren *nq8.png "%~na.png"
    files\gimconv "%~na.png" --format_style psp --format_endian little --pixel_order faster --image_format index4
    del "%~na.png"
    )

我可以看到上面的代码有两个明显的问题:

  1. 在批处理文件中,您需要替换%%%(在批处理文件中使用 %%a,在cmdshell 中使用%a

  2. 有些文件可能会被处理两次,因此您应该for /fdir) 一起使用。

可能还有其他问题,但我没有所需的程序来测试它。

请使用以下批处理文件:

for /f "tokens=*" %%a in ('dir /b *.png') do (
    files\pngnq -s 1 -n 16 %%~fa 
    ren *nq8.png "%%~na.png"
    files\gimconv "%%~na.png" --format_style psp --format_endian little --pixel_order faster --image_format index4
    del "%%~na.png"
    )

笔记:

这是批判的您使用的FOR /F,而不是简单的FOR

在开始迭代之前收集命令FOR /F的整个结果DIR,而简单FOR在内部缓冲区已满后开始迭代,这增加了多次重命名同一文件的风险。

根据建议德本汉姆在他的回答中在多个文件名末尾添加“文本”


进一步阅读

相关内容