Não consigo ver o que está incorreto no código do meu lote:
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"
)
Eu posso ver dois problemas óbvios com o código acima:
-
Em um arquivo de lote, é necessário substituir
%
por%%
(em um arquivo em lotes use %% a, emcmd
shell use%a
) -
Existe a possibilidade de alguns arquivos serem processados duas vezes, então você deve usar
for /f
junto comdir
).
Pode haver outras coisas erradas também, mas eu não tenho os programas necessários para testá-lo.
Use o seguinte arquivo em lotes:
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"
)
Nota:
It is critical that you use
FOR /F
and not the simpleFOR
.The
FOR /F
gathers the entire result of theDIR
command before it begins iterating, whereas the simpleFOR
begins iterating after the internal buffer is full, which adds a risk of renaming the same file multiple times.
como recomendado pelo dbenham em sua resposta para adicione" texto "ao final de vários nomes de arquivos :
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- dir - Exibe uma lista de arquivos e subpastas.
- para / f - Comando Loop contra os resultados de outro comando.