Пакет FOR петлі не працює


2

Тому я намагаюся перетворити зображення в каталог, але він взагалі не працює, і я не бачу, що в моєму пакетному коді невірно:

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 not очікувалося" (in était inattendu).

EDIT: це початковий (робочий код) код:

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

Відповіді:


2

Я не бачу, що неправильно в моєму пакетному коді:

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. У пакетному файлі необхідно замінити %з %%(в використанні пакетного файлу %% а, в cmdвикористанні оболонки %a)

  2. Є ймовірність, що деякі файли можуть оброблятися двічі, тому їх слід використовувати 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починається ітерація після внутрішнього буфер заповнений, який додає ризик перейменування і той же файл декілька разів.

як радить dbenham у своїй відповіді, щоб додати "текст" до кінця декількох імен :


Подальше читання


Дякую за уточнення, але ваш код наполовину працює, він не приймає назву файлу, він бере перший рядок результату, який dirдає вам, об'єм диска D: називається blabla
Omarrrio

1
На жаль Невелика помилка. Мої вибачення. Нам потрібно додати /bдо dirкоманди. Відповідь оновлено.
DavidPostill

1
Це чудово! ;)
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.