Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Batch Script


Автор: SovietMan 7.12.2007, 20:10
Здравствуйте. Решил написать пару скриптов на batch-е, возникли вопросы.
1) Как напечатать пустую строку (переход строки)? Если просто написать echo, то output будет ECHO is on.
2) Как сделать так, чтобы команда echo не переходила на следующую строку, и следующая команда echo печатала на той же строке?
3) Есть ли аналог /dev/null в batch-е? Некоторые сообщения выводятся на экран даже при echo off (например, сообщения об ошибке). Как сделать так, чтобы не даже они не выводились?
4) Нашел я, как объединить команды в блок - взять в круглые скобки. Но... Вот я открываю скобки, начинаю блок, и внутри блока нужно распечатать закрывающую скобку, скажем, echo ). Проблема в том, что к закрытой скобке, даже внутри команды echo, интерпретатор относится как к закрытию блока. Можно ли сделать так, чтобы не относился, а просто напечатал? Что-то вроде символа '\' в Юниксе.

Автор: regis 11.12.2007, 16:06
На вопрос 3: аналог есть -- устройство nul:
Сделать редирект stderr можно как и в U*X: оператором 2>

Например,

prog ar1 arg2 2> _errors.log

- переадресует диагностический вывод prog в файл _errors.log
(работает во всех Win выше 2000, насчет Win 9x не уверен)

На остальные вопросы надо подумать...

Автор: SABROG 11.12.2007, 16:11
Код

@echo off
type b.bat | more +22 > tmp
echo (Ya na odnoy stroke !)>1s
echo (Ya vse eshe na odnoy stroke !)>2s
IF "1" == "1" (
cls
type tmp
type tmp
type tmp
type 1s
pause
cls
type tmp
type tmp
type tmp
type 2s
pause
del tmp
del 1s
del 2s
echo Эта скрытая строка, ее никто никогда не увидит !>nul
)



Попробую объяснить что тут написано.
Печатаем на экран исходник bat файла с 23 строки (отсчет с нуля), на форуме этой строки не видно, но она быть должна в конце. Результат, т.е перевод каретки записываем во временный файл tmp. Через type tmp делаем перевод строк. Команда CLS очищает экран перед каждым выводом строк, таким образом мы добиваемся того, чтобы новая строка затирала старую. Строки со скобками готовим вне блока и пихаем в файла, после чего выводим через type уже внутри блока. В конце подчищаем за собой удаляя ненужные файлы.

Добро пожаловать в ад... Если ДОС не принципиально советую изучать WSH (Windows Shell Script), они умеют работать и с файлами и с базами данных и с экселем и вордом, все это благодаря поддержки загрузки ActiveX компонентов.

Автор: SovietMan 12.12.2007, 01:01
SABROG:

Проблема, что новый текст, хоть и печатается на той же строке, затирает старый. Cls мне совсем не нужен.
Я просто пишу такой скрипт, чтобы можно было легко распространять, запускать и редактировать, не устанавливая по возможности компиляторы и всякие .NETы, причем даже тем людям, которые не разбираются в программировании, а обладают базовыми знаниями компьютера. Для себя я бы и на С написал.
Насчет ада - это точно. Видимо, майкросовтовцы не думали, что кому-то всерьез может понадобится batch, раз уж есть форточки.

Кстати, как напечатать переход строки я нашел:
echo.
(с точкой в конце).

Автор: SABROG 12.12.2007, 11:35
WSH вроде идет еще с 95ой винды кажись, как щас помню в стандартной поставке еще пример был вывода графика в excel и кручение его в 3д плоскости.

Кстати на wasm.ru статья была интересная как написать любую программу под дос без компилятора. Только чтобы это делать постоянно надо обладать хорошей памятью. Сам как-то давно писал bat скрипт, который создавал исполнимый .com файл, инструкции которого все представляли собой печатные символы. Т.е. при желании в bat можно и вирусника впихнуть.

Автор: regis 13.12.2007, 16:57
Честно говоря, я бы просто посоветовал поставить под Win нормальный U*X shell, и работать с ним.

Для серьезного прогаммирования командный интерпретатор DOS/Win непригоден.

Автор: SABROG 13.12.2007, 17:08
А если речь зашла о "поставить", то тогда лучше сразу Perl или Python.

Автор: SovietMan 13.12.2007, 23:16
Ну вот, началось.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)