Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Имя файла добавлено более одного раза

Автор вопроса: Nicholas W.Ответов: 1

Я использую пакетный файл для добавления нескольких имен файлов.

Для файлов: 1.txt, 2.txt, 3.txt, 4.txt, 5.txt - я хочу добавить copy_1.txt

set "nname=copy_"

for %%A in (*.txt) do (
ren %%A %nname%%%A
)
exit

Однако кажется, что цикл возвращается к первому файлу и повторно добавляет имя файла.

Вот вывод cmd:

> for %A in (*.txt) do (ren %A copy_%A )
> (ren 1.txt copy_1.txt )
> (ren 2.txt copy_2.txt )
> (ren 3.txt copy_3.txt )
> (ren 4.txt copy_4.txt )
> (ren 5.txt copy_5.txt )
> (ren copy_1.txt copy_copy_1.txt )

Может ли кто-нибудь объяснить мне, почему это происходит и как можно избежать этой проблемы?

Я пытался добавить "обработчик исключений", но это бесполезно.

set "nname=copy_"

for %%A in (*.txt) do (
if exist %nname%%%A goto :exit
ren %%A %nname%%%A
)
:exit
echo file exists

Заранее спасибо!

cmdfor-loopfilenamesappenddos

Ответы

Ответ 1 · рейтинг 1 · David I. McIntosh

Оболочка не завершает свой список файлов до того, как начнет обрабатывать вашу команду переименования, поэтому результаты первой команды переименования, а именно copy_1.txt, становятся совпадающими с *.txt.

Один из способов избежать этого:

for /F "usebackq" %%A in (`dir /b *.txt`) do (ren %%A %nname%%A)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы