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


Автор: TP@MB@Y 18.3.2010, 10:36
Делаю рефакторинг старого bat-файла. 
Для удобства всегда веду логирование своих скриптов, вот и здесь хочу тоже самое осуществить.

запись в лог представляет из себя что-то типа:
Код

echo "[%DATE% %TIME%] Some string" >> %LOG%


Хотелось бы это оформить в виде функции, чтобы просто написать, например:
Код

call :logit "Some string"


Погуглив, я нашел, что это реализуется так:
Код

:logit 
echo "[%DATE% %TIME%] Some string" >> %LOG%
exit \b


но такая реализация выдает ошибку синтаксиса.
Если есть знающие люди - поделитесь как правильно реализовать?


PS 
Это мой первый bat-скрипт, поэтому не ругайте сильно если что smile

Автор: Akina 18.3.2010, 11:44
Сделай отдельный батник для вывода в лог, а не процедуру в текущем. И передавай ему строку для вывода в качестве параметра.

Автор: TP@MB@Y 18.3.2010, 11:46
Цитата(Akina @ 18.3.2010,  11:44)
Сделай отдельный батник для вывода в лог, а не процедуру в текущем. И передавай ему строку для вывода в качестве параметра.

как вариант.

а более изящно никак? smile

Автор: Akina 18.3.2010, 11:47
Более изящно - отказаться от древней технологии батников в пользу хотя бы VBS/JS скрипта. 

Автор: Дрон 18.3.2010, 15:10
TP@MB@Y, да вроде у тебя всё правильно написано, кроме %LOG%, которая не понятно на что ссылается. Вот на неё и ругается система, а вызов call идёт нормально:

Код
call :logit "Preved, Medved!"

goto :eof

:logit 
echo "[%DATE% %TIME%] %~1" >> log.txt
exit \b

Автор: TP@MB@Y 18.3.2010, 17:14
Цитата(Дрон @ 18.3.2010,  15:10)
TP@MB@Y, да вроде у тебя всё правильно написано, кроме %LOG%, которая не понятно на что ссылается. Вот на неё и ругается система, а вызов call идёт нормально:

Код
call :logit "Preved, Medved!"

goto :eof

:logit 
echo "[%DATE% %TIME%] %~1" >> log.txt
exit \b

ну %LOG% у меня обозначена, просто я не стал ее определение писать в код.

а вот "goto :eof" у меня нет, может поэтому ругается, когда исполнение скрипта находит на определение функции?

Автор: Дрон 18.3.2010, 18:43
Цитата(TP@MB@Y @  18.3.2010,  17:14 Найти цитируемый пост)
может поэтому ругается, когда исполнение скрипта находит на определение функции?

Не знаю  smile 
Понятия "определение функции" для пакетного файла не существует, это ж просто метка. Такая же как для goto. 
А :eof это тоже просто специальная предопределённая метка для выхода.

Вот так у меня работает, может ты LOG неправильно определял? 
Например пробелов между названием переменной, знаком =, и значением быть не должно.
Код
SET LOG=C:\log.txt

call :logit "Preved, Medved!"

goto :eof

:logit 
echo "[%DATE% %TIME%] %~1" >> %LOG%
exit \b


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