Batch Echo Style: два оператора в одной строке [дубликаты]

У меня работает какой-то код, но я хочу сделать его лучше.

В настоящее время мой код:

@echo off
echo Starting Program 1 ... >> %log%
call Program1.cmd
if %ERRORLEVEL%==1 (
    echo Error. >> %log%
) else (
    echo Success. >> %log%
)

Я хотел бы сохранить два эха в коде, потому что я считаю, что это лучше по причинам отладки. Однако мне не нравятся две выходные строки для него. Как мне нужно изменить код, чтобы получить этот вывод:

Запуск программы 1 ... Успех

Спасибо за вашу помощь, Питер

Всего 2 ответа


Вы должны сохранить первое сообщение в переменной, а затем использовать его в последнем перенаправлении в файл.

Для использования вашего кода это будет выглядеть так:

@echo off
set "log=C:	soatchlog.log"
set "message=Starting Program 1 ... "
call Program1.cmd
if %ERRORLEVEL%==1 (
    echo %message% Error. >> %log%
) else (
    echo %message% Success. >> %log%
)

Редактировать В моем скрипте выше вы можете потерять информацию журнала, если что-то идет не так с вызываемым скриптом.

Вы можете сделать это так:

@echo off
set "log=C:	soatchlog.log"
echo | set /p message="Starting Program 1 ... " >> %log%
call Program1.cmd
if %ERRORLEVEL%==1 (
    echo Error. >> %log%
) else (
    echo Success. >> %log%
)

Переключатель /p :

Переключатель / P позволяет вам установить значение переменной в строку ввода, введенную пользователем. Отображает указанную строку promptString перед чтением строки ввода. PromptString может быть пустым.

Примечание: здесь сообщение является просто фиктивной переменной.

На эту тему есть сложный ответ от dbehham .


Вы можете неправильно использовать команду set /p для вывода строки без перевода строки.

@echo off
<nul set /p "=Starting Program 1 ..." >> %log%
call Program1.cmd
if %ERRORLEVEL%==1 (
    echo Error. >> %log%
) else (
    echo Success. >> %log%
)

Есть идеи?

10000