Как сделать в командной строке бегущий текст из BAT-файла
Как сделать в командной строке бегущий текст: короткий BAT-файл с движением строки, паузой и остановкой. Объясняю каждую команду и показываю безопасную проверку.
Д
Денис
Продакт LibraChat
8 мин чтения
Я хотел показать слово, которое появляется справа в окне CMD, проходит по строке и исчезает слева. Одного `echo` для этого мало: команда печатает текст, но не двигает уже напечатанное. Если спрашиваешь, как сделать в командной строке бегущий текст, нужен короткий цикл: каждый кадр выводит другой фрагмент длинной строки, затем делает паузу. Ниже — конечный BAT-файл, который не меняет систему и сам останавливается.
Пример рассчитан на командную строку Windows и слово `HELLO`, чтобы не зависеть от кодировки кириллицы. Я взял окно шириной в 20 символов. Изменишь слово и ширину после того, как поймёшь движение. Это учебная анимация символов в консоли, а не создание видеоролика или эффект на странице сайта.
Что на самом деле движется в окне CMD
В терминале не едет объект как на экране монтажа. Я собираю длинную строку из 20 пробелов, слова и ещё 20 пробелов. Затем показываю срез длиной 20 символов. В первом кадре видны только пробелы; в следующем справа появляется последняя буква будущего слова; дальше окно среза будто скользит вправо по исходной строке. На экране слово при этом идёт влево.
Я сначала попробовал просто повторять `echo HELLO` в цикле и получил столбик одинаковых слов. Потом добавил `cls` перед кадром: экран очищался, но надпись стояла на месте. Значит, менять нужно не скорость и не цвет, а сам выводимый кусок строки. Подстрока с меняющейся начальной позицией оказалась достаточной.
Вот весь файл. Сохрани его как `scroll.bat` в отдельной учебной папке; текст не запускает ничего, кроме команд, которые видны ниже.
Если печатаешь команды прямо в интерактивном окне, синтаксис переменной цикла другой: `%i` вместо `%%i`. Здесь показан именно BAT-файл, поэтому двойной процент нужен. Я один раз перепутал варианты и получил ошибку ещё до первого кадра. Проще сохранить весь блок в файле, чем по строке вставлять его в CMD.
Как сделать в командной строке бегущий текст без бесконечного цикла
В строке `for /L %%i in (0,1,25)` стоят начало, шаг и конец счётчика. Здесь будет 26 проходов: от нуля до 25 включительно. На каждом `cls` очищает окно, а `echo` показывает двадцатисимвольный срез строки. `timeout /t 1 /nobreak >nul` делает паузу в одну секунду и прячет служебную надпись ожидания. После последнего кадра файл выходит из цикла и заканчивается.
`setlocal EnableDelayedExpansion` нужен, чтобы переменная внутри скобок цикла обновлялась во время исполнения, а не подставилась заранее. В записи `!line:~%%i,20!` число `%%i` задаёт начало среза, а `20` — его длину. Это не та же команда, что `echo %line%` без цикла. Тонкость синтаксиса можно проверить в документации Windows для `setlocal`, `for` и обработки переменных CMD.
Часть файла · Что делает · Что будет, если убрать
`pad` — Даёт месту для входа и выхода слова. — Слово начнётся сразу у края.
`for /L` — Меняет начальную позицию среза. — Останется один неподвижный кадр.
`timeout` — Даёт глазу увидеть каждый кадр. — Вывод проскочит почти мгновенно.
Важна конечность примера. Популярная запись с `goto` и вечным возвратом к метке оставляет окно постоянно работающим, пока человек сам не остановит программу. Для первого опыта это лишнее. Здесь можно спокойно посмотреть результат, вернуться к файлу и изменить один параметр. На реальном терминале частая очистка экрана может мерцать; это нормально для такого простого способа, а не ошибка текста.
Как поменять слово и скорость бегущего текста в командной строке
Если нужно другое латинское слово, замени `HELLO` в `line`. Для более длинной фразы надо заново посчитать конец цикла: в нашем примере 20 пробелов перед словом и пять букв в слове, поэтому последний срез начинается с позиции 25. Для фразы из восьми символов конец будет 28. Если пробелов справа не хватает, последние кадры станут короче; это не опасно, но движение обрежется.
Мой порядок правки такой:
Выбрать ширину окна вывода и сделать столько же пробелов в `pad`.
Заменить слово в `line`, пока оставляя латиницу.
Поставить конец цикла равным числу пробелов плюс длине слова.
Заменить `20` в срезе на выбранную ширину.
Запустить файл и посмотреть первый и последний кадр.
Пауза в одну секунду делает пример медленным, зато сразу видно, откуда входит слово. `timeout` принимает целое число секунд; для плавной анимации с дробной паузой этот учебный BAT-вариант неудобен. Не стоит подменять это обещанием «плавных 60 кадров». Если нужна вывеска для ролика или сайта, там лучше использовать инструмент, который действительно рисует кадры. CMD хорошо показывает принцип строкового среза.
С кириллицей возникает отдельная задача: кодировка BAT-файла и кодовая страница окна должны совпасть. Я не советую начинать с русской строки, если ещё не проверил латинский пример. Сначала добейся правильного движения `HELLO`, потом отдельно проверь, как твой редактор сохраняет файл и как CMD показывает буквы. Это две разные проверки. Бездумная смена кодовой страницы ради одного примера может испортить вывод других символов в том же окне.
Как понять, что цикл действительно выводит разные кадры
Если анимация кажется неподвижной, временно убери строку `cls` и задержку. Вместо эффекта ты увидишь последовательность срезов один под другим. Я запустил локальную уменьшенную версию на 11 кадров с шириной пять символов. Сначала она вывела `[ ]`, затем `[ H]`, `[ HE]`, `[ HEL]`, `[ HELL]`, `[HELLO]`; после этого буквы ушли влево и в конце снова остались пробелы. Так виден каждый сдвиг на одну позицию. Это удобнее для поиска ошибки, чем смотреть на быстро очищающийся экран.
Три контрольных кадра показывают, что границы цикла посчитаны верно:
первый срез пуст, потому что перед словом стоят пять пробелов;
в середине всё слово помещается в окно без обрезки;
последний срез снова пуст, потому что слово целиком вышло слева.
После отладки верни `cls` и паузу. Не оставляй отладочные скобки вокруг текста, если нужна чистая бегущая строка. Убедись также, что видимая часть окна CMD достаточно широкая для выбранного среза. Если физическое окно уже двадцати символов, консоль начнёт переносить строки, и движение будет выглядеть рваным даже при верном цикле. Я сначала расширяю окно, а потом меняю математику скрипта.
Для надписи с пробелами внутри расчёт тоже прост: учитывай все символы, включая пробелы между словами. Но не делай итоговую фразу длиннее, чем действительно нужно для учебного эффекта. На длинной строке тридцать кадров по секунде превращаются в ожидание, а не в демонстрацию. Лучше сократить фразу или после проверки перейти к другому способу анимации.
Что проверить, если бегущий текст в CMD оставляет пустой экран
В начале цикла пустой экран ожидаем: окно пока показывает только первые пробелы. Подожди несколько кадров. Если слово не появилось, проверь, что `line` действительно содержит пробелы и буквы, а в строке `echo` стоят восклицательные знаки вокруг имени переменной. Для отладки я временно убираю `cls` и ставлю паузу короче только после того, как вижу правильные срезы. Тогда каждый кадр остаётся в истории окна, и ошибка становится заметнее.
Проверь также расширение файла. В некоторых редакторах запись `scroll.bat.txt` выглядит почти как BAT, но CMD воспринимает её как текстовый файл. Открой свойства или включи отображение расширений в проводнике. Не запускай случайно скачанный BAT-файл с чужого сайта ради такого эффекта: этот пример достаточно короток, чтобы прочитать каждую строку до запуска.
Я не добавляю сюда `curl`, загрузку библиотек и команды с правами администратора. Ни одна из них не нужна, чтобы сдвинуть пять букв по консольной строке. Если понадобится заменить цикл на PowerShell, это уже другая версия примера с другой логикой задержки и вывода; не стоит смешивать её с BAT в одном новичковом файле.
Где поможет LibraChat
Когда захочешь изменить длину фразы или сделать движение справа налево в другой ширине, можно попросить LibraChat объяснить именно этот код: «Проверь мой BAT-файл для CMD. Объясни, почему в `for /L` стоят двойные проценты, а в срезе восклицательные знаки. Не добавляй загрузок и системных настроек». Сравни объяснение с командами в файле, прежде чем менять их.
Для более общей работы с кодом полезен разбор о нейросети для программиста. При любом ответе я проверяю команды до запуска, особенно если они работают с файлами. Перед разбором длинного BAT-файла посмотри доступные возможности аккаунта на странице тарифов.
Попробуй прямо сейчас создать файл с `HELLO`, запусти его в CMD и досмотри до остановки. Затем поменяй слово на `START` и попробуй объяснить, почему конец цикла остаётся 25. Когда сможешь предсказать первый и последний видимый кадр, бегущий текст перестанет быть набором странных символов в BAT-файле.