Цитата shadowbat:
задача - найти причину создания лишнего файла "_new" »
|
При некоторых условиях (правильных по синтаксису, но неправильных для корректного кода), в цикле for может образоваться "лишняя" итерация. Как раз, для Вашего случая...
Вот, код, который наглядно отображает эту "лишнюю" итерацию:
Код:
@echo off
set /a f=5 &:число создаваемых файлов в каталоге
set /a k=0 &:динамический счетчик для наименований файлов
set /a n=0 &:динамический счетчик для подсчета итераций
rem Если отсутствует, создаем каталог TEXT, рядом со сценарием:
set "d1=%cd%\text"
if not exist "%d1%" md "%d1%"
cd "%d1%"
setlocal enabledelayedexpansion
rem Создаем тестовые файлы:
if not exist "*.txt" (
for /l %%i in (1,1,!f!) do rem: фигня>"!k!.txt"&set /a k+=1
)
rem Проверка лишней итерации в цикле:
echo.Файлов в каталоге:
dir /b/a-d
echo.--------------------------
echo.
echo.Переименование файлов циклом и собственно, "лишняя итерация":
for %%A in (*.txt) do (
echo %%A
rem Так проходов n+1 от количества файлов:
rename "%%A" "!random!.txt"
set /a n+=1
)
echo.
echo Проходов: !n!
echo.--------------------------
echo.
echo.Итоговое число файлов в каталоге:
dir /b/a-d
echo.
pause
Т.е. при наличии 5 текстовых файлов, цикл for выполняет 6 итераций...
Мораль: не выполняйте переименование файлов посредством цикла
for, в одном и том же каталоге, где находятся исходные файлы.