Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата 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, в одном и том же каталоге, где находятся исходные файлы.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 29-09-2022 в 08:54.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:42, 29-09-2022 | #4