Как напечатать новую строку в сценарии MS-DOS? - PullRequest
5 голосов
/ 23 февраля 2009

Я хочу напечатать вывод программы в MS-DOS, поэтому я написал .bat файл, который говорит:

cls
ruby foo.rb

Но вывод - как он появляется в моей командной строке - выглядит следующим образом:

c:\workspace>ruby foo.rb
foo output
c:\workspace>

Я хотел вставить новую строку в вывод, используя MS-DOS, потому что я не хочу загрязнять свой код Ruby чем-либо, не связанным с тем, что код должен делать.

Единственные команды в MS-DOS, которые выглядят так, как я хочу, это 'type' и 'print', но обе они предназначены для печати файлов.

Я попытался создать текстовый файл с двумя пустыми строками и вывести его с помощью команды «type», но он выглядит грязно.

Любые идеи будут оценены.

Ответы [ 7 ]

24 голосов
/ 23 февраля 2009

echo. создаст новую строку.

Итак, ваш скрипт должен выглядеть примерно так:

@ECHO OFF
cls
echo.
ruby foo.rb
4 голосов
/ 16 апреля 2012

Даже если здесь 4 ответа с одним и тем же советом, чтобы использовать ECHO., это не лучшее решение!

Есть два недостатка.

  1. Это медленно
    ECHO. в ~ 10 раз медленнее, чем нормальная echo команда, потому что ECHO. заставит диск обращаться

  2. Может произойти сбой
    Если файл существует с именем ECHO (без расширения), то каждая команда ECHO. приведет к ошибке file not found вместо вывода пустой строки.

Но что вы можете сделать тогда?
Для простой пустой строки есть много рабочих способов.

echo+
echo=
echo;
echo,
echo:
echo(

Но иногда вам нужен безопасный способ отобразить содержимое переменной, даже если переменная пуста или содержит нечетное содержимое, например /? или \\..\..\windows\system32\calc.exe.

ECHO<character>%variable%

echo=/?
echo;/?
echo,/?
echo:\\..\..\windows\system32\calc.exe

Тогда большинство команд потерпит неудачу, только ECHO( работает в любой ситуации.
Это выглядит немного странно, но это работает, и с закрывающей скобкой это не требует и не создает никаких проблем.

4 голосов
/ 23 февраля 2009

как насчет:

@echo off
cls
echo.
ruby foo.rb
echo.

прощай

3 голосов
/ 23 февраля 2009

Попробуйте это

echo.
2 голосов
/ 23 февраля 2009

Используйте команду echo, за которой следует точка, чтобы отобразить новую строку в командном файле MS-DOS:

echo.
1 голос
/ 03 декабря 2013

Я согласен с Джебом. "echo (" определенно быстрее и не вызывает доступа к файлу. Просто попробуйте, и вы сами это поймете. Вот небольшой тест, который вы, возможно, захотите попробовать.

Создайте файл с именем «echo» и в том же каталоге создайте файл test.bat или test.cmd со следующим содержимым в сценарии:

@echo off
echo %time%
echo.
echo Hello, World
echo.
echo.
echo What time is it?
echo.
echo It's Miller Time!
echo.
echo.
echo CHEERS!
echo.
echo %time%

Запустить вновь созданный пакетный файл. Что вы получаете? Куча сообщений об ошибках, когда файл "эхо" существует в том же каталоге.

Теперь удалите файл "echo".

В моей системе от начала до конца потребовалось примерно 0,05 секунды, используя «эхо». метод из-за доступа к файлу.

Теперь замените все "эхо". в тестовом файле выше с "echo (" и запустите его снова.

От начала до конца требуется примерно 0,01 секунды, используя выражение "echo (".

Финальный тест, заново введите файл с именем "echo" в тот же каталог и запустите пакет в последний раз.

Нет сообщений об ошибках.

QED

0 голосов
/ 23 февраля 2009

Мне не ясно, что вы хотите здесь, но, возможно, это поможет.

Если вы хотите, чтобы вывод отправлялся куда-то еще, используйте команду «output pipe».

ruby foo.rb > out.txt

выведет вывод команды ruby ​​в файл out.txt.

Если вы хотите контролировать выход, используйте ECHO.

@ECHO OFF/ON //turns off/on command output
ECHO "Blah" //writes "Blah" to the console.
ECHO. //writes a blank line to the console.
...