![批量 FOR 循环不起作用](https://linux22.com/image/1480978/%E6%89%B9%E9%87%8F%20FOR%20%E5%BE%AA%E7%8E%AF%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
因此,我正在尝试执行一个目录中的图像转换过程,但它根本无法运行,而且我无法看到批处理代码中有什么错误:
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"
)
我可以看到上面的代码有两个明显的问题:
在批处理文件中,您需要替换
%
为%%
(在批处理文件中使用 %%a,在cmd
shell 中使用%a
)有些文件可能会被处理两次,因此您应该
for /f
与dir
) 一起使用。
可能还有其他问题,但我没有所需的程序来测试它。
请使用以下批处理文件:
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
在内部缓冲区已满后开始迭代,这增加了多次重命名同一文件的风险。
根据建议德本汉姆在他的回答中在多个文件名末尾添加“文本”:
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 目录- 显示文件和子文件夹的列表。
- 对于/f- 循环命令以执行另一个命令的结果。