Как перезаписать ту же строку в выводе команды от пакетного файла

Я хочу записать некоторую информацию о состоянии, которая заменяет последнюю строку, когда я делаю что-то.

В следующем bat-файле в качестве примера я хочу текст Step 2 перезаписывать Step 1 на той же строке в выводе команды.

echo off

echo Step 1
REM Do some stuff...

echo Step 2
REM do some other stuff...
12
задан 08.12.2011, 13:11

2 ответа

Вы не можете. Обычно можно достигнуть такого рода вещи включением символа возврата каретки (0x0D) в файле, который отложит курсор к первому столбцу в той же строке. Но в этом случае это не работает; CR просто тихо едят.

Кроме того, получение CR там довольно хитро и по крайней мере здесь включило текстовый редактор. Я предложил бы, чтобы Вы записали немного утилиты, которая сделает это для Вас, это на самом деле не очень твердо. Следующая небольшая программа C могла бы быть достаточной (если Вам не нужен Unicode):

#include <stdio.h>

int main(int argc, char* argv[]) {
  if (argc < 2) return 1;
  printf("\r%s", argv[1]);
}

Это делает не что иное как печать символа CR и затем текста, который Вы указываете как его первый аргумент. Использование следующим образом:

@echo off
<nul set /P X=Step 1
pause>nul 2>nul
over.exe "Step 2"

Последняя строка является вызовом к той программе. Вторая строка является нормальной пакетной идиомой для печати текста без запаздывающего разрыва строки (который важен в этом случае, потому что иначе Вы не могли перезаписать строку). Вы могли точно также использовать программу выше также в том месте, все же.

Слегка hacky путь, но единственный, где можно быть уверены, где Вы заканчиваете, должен был бы использовать cls до Вашего вывода шага. Будет мерцать, но тот путь Вы всегда пишете в верхнее левое. И ударьте все, что было видимо в консоли (который является, почему я не рекомендовал бы это); большинству пользователей не нравится так слишком много.

3
ответ дан 07.12.2019, 11:54

Вам была бы нужна библиотека экранного курсора как curses или ncurses, но я не чрезмерно знаком с их использованием. Обе библиотеки были разработаны для систем Unix, но можно найти их для Windows (в среде Cygwin или GnuWin32).

Я не знаю ни о каком простом способе получить доступ к ним в пакетном файле стиля DOS. Вы могли бы быть более обеспеченным программированием на скомпилированном языке. Смотрите на ПРАКТИЧЕСКОЕ РУКОВОДСТВО Ncurses для получения лучшее представление о том, будет ли это полезно.

0
ответ дан 07.12.2019, 11:54

Теги

Похожие вопросы