Файл переименован с помощью пакетного файла, но он не остановится

#batch-file #file-rename

#пакетный файл #файл-переименовать

Вопрос:

Мне нужно переименовать все файлы в папке, добавив «BV» перед именем файлов. Мой код функционирует, но проблема возникает, когда общий объем файла в этой папке превышает около 200 файлов. Он переименует все файлы в это: «BV_BV_BV …» и это не остановится.

Вот мой код:

 @echo off amp; setlocal

ECHO Moechten Sie das wirklich tun? (Bereits vorhandene Bildverzeichnisse werden geloescht 
ECHO und in den Dateinamen wird AWK2 hinzugefuegt) (j / n)
SET /p wahl=
if '%wahl%' == 'n' goto Nein
if '%wahl%' == 'j' goto Ja

:Ja
ECHO on

FOR %%I IN (*.bmp) DO ren "%%I" BV_"%%~nI".bmp

pause
  

Я не уверен, как я могу остановить пакетный файл после того, как все файлы были переименованы. Спасибо за вашу помощь.

Комментарии:

1. Если вы прочитаете строку чуть выше SET /p @Gerhard, я собираюсь предложить AWK2 вместо этого, Do you really want to do that? (Pre-existing image directories will be deleted and AWK2 added to the filename) (y / n)

2.1. for буферизует некоторые имена файлов, переименовывает их, а затем читает следующие, поэтому файлы могут переименовываться несколько раз; чтобы избежать этого, используйте for /F "delims= eol=|" %%I in ('dir /B /A:-D-H-S "*.bmp"') do ren "%%I" "BV_%%~nxI" ; этот метод сначала получает весь список файлов, прежде чем какой-либо из них будет переименован. 2. set "wahl=" amp; set /P wahl="" . 3. if /I "%wahl%"=="n" goto nein . 4. Где :nein ? 5. Вместо того, чтобы set /P рассмотреть возможность использования choice для таких запросов «да» / «нет»…

Ответ №1:

Предполагая, что вы хотите переименовать все файлы один раз, с префиксом BV_ согласно вашему примеру в for цикле. Обратите внимание, я использовал choice вместо set /p

 @echo off amp; setlocal

ECHO Moechten Sie das wirklich tun? (Bereits vorhandene Bildverzeichnisse werden geloescht 
ECHO und in den Dateinamen wird AWK2 hinzugefuegt) (j / n)
choice /c jn /m "wahl"
goto opt%errorlevel%

:opt1
for /f "delims=" %%I IN ('dir /b /a-d *.bmp ^| findstr /v /b "BV_"') do ren "%%~I" "BV_%%~I"
goto :eof
:opt2
echo do what ever you need to do here.