Странное поведение с длинными именами файлов и escape-последовательностями консоли VT-100 в Win10 - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть пакетный файл 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 символов.

Это известное поведение?Это действительно не главная проблема, но это немного раздражает.Есть ли способ обойти это?

...