Я проверил его, чтобы понять, почему он так странно себя ведет, и единственный ответ, который я могу придумать, это то, что он просто странно действует.Я предполагаю, что это зависит от порядка операций.
это мое мнение: в некоторых реализациях кода for / r избегает бесконечного цикла.то, что он делает, запускается на файлы, которые не являются .mp4 в первую очередь.затем, вероятно, потому что он был переименован, он не распознает его как тот же файл.вероятно, после того, как он запускается на .mp4, второй раз, его файловый индекс (за исключением последнего времени, открытого и отредактированного) не должен отличаться по крайней мере от точки, где система больше не будет распознавать его как тот же файл,Я протестировал немного другую версию кода, которая выдает бесконечный цикл:
set /A count = 0
pushd %~dp0
for /R %%f in (*.mp2, *.mpg, *.vob, *.avi, *.wmv, *.mov, *.mp4, *.m4v, *.mpeg) do (
mkdir %%~dpf\encode
move %%f %%~dpf\encode
rename %%~dpf\encode\%%f %%~dpf\encode\%%~nf.mp4
move %%~dpf\encode\%%~nf.mp4 %%~dpf
rmdir %%~dpf\encode
set /A count+=1
)
popd
echo Count is: %count%
pause
и, как ни странно, он не только запустил бесконечный цикл, но и создал бесконечное количество подпапок с именем '\ encode \кодировать \ кодировать ... ', но причина этого не имеет значения.что отличается в этой версии кода, так это то, что я всегда переименовываю файлы.Вероятно, именно поэтому он создает бесконечный цикл.
Команда for / r повторяет файлы, которые были переименованы, но не обязательно в отредактированных.Похоже, что решение в действительности состоит в том, чтобы сначала запустить код для всех файлов .mp4, а затем - для других.