У меня есть пакетный файл Windows 10, который запускает ffprobe для всех файлов в каталоге.Каждое имя файла отображается на экране в определенной строке.При обработке следующего файла предыдущее имя файла стирается, а следующее имя файла записывается в той же строке (чтобы имена файлов не появлялись на экране).Я заметил, что для имен файлов длиной более 120 символов escape-последовательности VT100 я в некоторой степени использую break.Вот часть моего кода, которая применима:
echo Checking files......
for %%a in ("*.*") do (
set filename=%%a
for /f "tokens=1,2,3 delims=," %%a in ('ffprobe [...]') do (
set codec=%%b
)
set /p="%ESC%[1G%ESC%[2K%%~a"<nul
)
set /p="%ESC%[A%ESC%[1G%ESC%[2K"<nul
(я отредактировал часть ffprobe только для того, чтобы все стало более читабельным. Ffprobe не имеет ничего общего с проблемой, которую я вижу).
Экранирующие последовательности обычно приводят к отображению текущего имени файла, когда ffprobe завершает работу с этим файлом, курсор перемещается на 1-ю позицию в этой строке и строка (имя файла) удаляется.После цикла for строка продвигается вниз, поэтому последовательность [A используется для перемещения строки вверх на 1, чтобы все файлы отображались на одной и той же строке.
Это нормально работало в течение нескольких месяцев, но я только заметил,для очень длинного имени файла, которое было 124 символами, имя файла не стирается, и следующее имя файла отображается в следующей строке, и пакетный файл оттуда работает правильно, это длинное имя файла остается на экране, а остальная часть моего сценариябежит ниже этого.Все должно работать так, чтобы каждое имя файла удалялось с экрана, и ни одно из них не должно отображаться после завершения этого раздела командного файла.
Я удалил символы в имени файла, чтобы увидеть, какое количество символов будет полученов обработках escape-последовательностей правильно и, по-видимому, максимум 120 символов.
Это известное поведение?Это действительно не главная проблема, но это немного раздражает.Есть ли способ обойти это?