Циклы и переменная арифметика в DOS Batch - PullRequest
0 голосов
/ 18 января 2012

У меня есть, скажем, десять изображений, которые я бы хотел переименовывать циклически каждый вечер. Я написал командный файл, который делает следующее:

@echo off
cls
ren image10.jpg imagetemp.jpg
ren image1.jpg image10.jpg
ren image2.jpg image1.jpg
ren image3.jpg image2.jpg
ren image4.jpg image3.jpg
ren image5.jpg image4.jpg
ren image6.jpg image5.jpg
ren image7.jpg image6.jpg
ren image8.jpg image7.jpg
ren image9.jpg image8.jpg
ren imagetemp.jpg image9.jpg
exit

Я бы хотел переписать этот цикл, поскольку счетчик изображений только увеличился, однако у меня возникли некоторые проблемы - мой сценарий просто завершается, и окно оболочки закрывается, не давая мне увидеть какой-либо вывод (я изменил все "rens" для "echos", чтобы увидеть, какой будет выход). Вот моя текущая попытка:

cls
ren image59.jpg imagetemp.jpg
ren image1.jpg image59.jpg

FOR %a IN (2 59) DO (
    set t = %a% - 1
    ren image%a%.jpg image%t%.jpg
)
ren imagetemp.jpg image58.jpg
exit

Как я уже говорил, я получаю либо "a является неожиданным", либо когда я пытаюсь изменить его на %% a, он просто падает, и окно закрывается. Любые советы?

1 Ответ

3 голосов
/ 18 января 2012

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

@echo off
cls
set count=59
ren image1.jpg imagetemp.jpg

for /L %%a IN (2,1,%count%) do call :rename %%a

ren imagetemp.jpg image%count%.jpg
goto :EOF

:rename
set /A t=%1-1
ren image%1.jpg image%t%.jpg  

Добавлено небольшое улучшение: установите количество для количества изображений, которые вы собираетесь циклически проходить.

...