Модераторы: bartram, Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Batch Script, Вопросы по Batch-у 
:(
    Опции темы
SovietMan
Дата 7.12.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.12.2007

Репутация: нет
Всего: нет



Здравствуйте. Решил написать пару скриптов на batch-е, возникли вопросы.
1) Как напечатать пустую строку (переход строки)? Если просто написать echo, то output будет ECHO is on.
2) Как сделать так, чтобы команда echo не переходила на следующую строку, и следующая команда echo печатала на той же строке?
3) Есть ли аналог /dev/null в batch-е? Некоторые сообщения выводятся на экран даже при echo off (например, сообщения об ошибке). Как сделать так, чтобы не даже они не выводились?
4) Нашел я, как объединить команды в блок - взять в круглые скобки. Но... Вот я открываю скобки, начинаю блок, и внутри блока нужно распечатать закрывающую скобку, скажем, echo ). Проблема в том, что к закрытой скобке, даже внутри команды echo, интерпретатор относится как к закрытию блока. Можно ли сделать так, чтобы не относился, а просто напечатал? Что-то вроде символа '\' в Юниксе.
PM MAIL   Вверх
regis
Дата 11.12.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



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

Например,

prog ar1 arg2 2> _errors.log

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

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

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
SABROG
Дата 11.12.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Код

@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 компонентов.

Это сообщение отредактировал(а) SABROG - 11.12.2007, 16:17


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
SovietMan
Дата 12.12.2007, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.12.2007

Репутация: нет
Всего: нет



SABROG:

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

Кстати, как напечатать переход строки я нашел:
echo.
(с точкой в конце).
PM MAIL   Вверх
SABROG
Дата 12.12.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



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

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


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
regis
Дата 13.12.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



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

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

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
SABROG
Дата 13.12.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



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


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
SovietMan
  Дата 13.12.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.12.2007

Репутация: нет
Всего: нет



Ну вот, началось.  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.