Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Логирование выполнения команд с датой и временем

Ответить
Настройки темы
CMD/BAT - [решено] Логирование выполнения команд с датой и временем

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите с батником, который бы логировал выполнение команд в файл с датой и временем выполнения. Нарыл в интернете несколько примеров, но нормального результата пока получить не удалось, строки дублируются почему. Что я делаю не так?

bat
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion


call :OutLog "run bat"
call :Outf
call :OutLog "end bat"

endlocal
exit /b 0

:OutLog
	setlocal enableextensions enabledelayedexpansion
	set sLine=%~1
	
	for /f "usebackq delims=" %%i in (`date /t`) do set sDate=%%~i
	for /f "usebackq delims=" %%i in (`time /t`) do set sTime=%%~i
	
	>>"%date%.txt" <nul set /p sVar=%sDate%%sTime% 
	
	if defined sLine (
		>>"%date%.txt" echo %sLine%
	) else (
		>>"%date%.txt" echo.
	)
	
	
	
:Outf
	setlocal enableextensions enabledelayedexpansion
	set sLine1=%~1
	
	::for /f "usebackq delims=" %%i in (`date /t`) do set tDate=%%~i
	::for /f "usebackq delims=" %%i in (`time /t`) do set tTime=%%~i
	for /f "usebackq delims=" %%i in (`xcopy /y "U:\test1\07.log" "U:\test2"`) do set sCopy=%%~i 
	
	>>"%date%.txt" <nul set /p sVar1=%sDate%%sTime% %sCopy%
	
	if defined sLine1 (
		>>"%date%.txt" echo %sLine1%
	) else (
		>>"%date%.txt" echo.
	)
	
	endlocal
	exit /b


Результат в логе
28.11.2017 15:02 run bat
28.11.2017 15:02 Скопировано файлов: 1. run bat
Скопировано файлов: 1.
28.11.2017 15:02 end bat
28.11.2017 15:02 Скопировано файлов: 1. end bat

Отправлено: 15:04, 28-11-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Pank:
Нарыл в интернете несколько примеров, но нормального результата пока получить не удалось, строки дублируются почему. Что я делаю не так? »
Пропустили при копировании существенную часть, посредством которой осуществляется возврат из первой процедуры. Посему при её вызове у Вас попутно исполняется и вторая . Смотрите внимательнее на оригинал.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:45, 28-11-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, навел на правильный путь
Если кто-будет искать, то вот что получилось:
Логирование команды с датой и временем
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion


call :OutLog "run bat"
TIMEOUT /T 2 /NOBREAK 
call :Outf
TIMEOUT /T 3 /NOBREAK 
call :OutLog "end bat"

endlocal
exit /b 0

:OutLog
	setlocal enableextensions enabledelayedexpansion
	set sLine=%~1
	
	for /f "usebackq delims=" %%i in (`date /t`) do set sDate=%%~i
	for /f "usebackq delims=" %%i in (`echo %time:~,-3%`) do set sTime=%%~i
	
	>>"%date%.txt" <nul set /p sVar=%sDate%%sTime% 
	
	if defined sLine (
		>>"%date%.txt" echo %sLine%
	) else (
		>>"%date%.txt" echo.
	)
	
	endlocal
	exit /b
	
	
:Outf
	setlocal enableextensions enabledelayedexpansion
	set sLine1=%~1
	
	for /f "usebackq delims=" %%i in (`date /t`) do set tDate=%%~i
	for /f "usebackq delims=" %%i in (`echo %time:~,-3%`) do set tTime=%%~i
	for /f "usebackq delims=" %%i in (`xcopy /y "U:\Паника\07.log" "U:\Мусор"`) do set sCopy=%%~i 
	
	>>"%date%.txt" <nul set /p sVar1=%tDate%%tTime% %sCopy%
	
	if defined sLine1 (
		>>"%date%.txt" echo %sLine1%
	) else (
		>>"%date%.txt" echo.
	)
	
	endlocal
	exit /b

Результат
28.11.2017 16:09:43 run bat
28.11.2017 16:09:45 Скопировано файлов: 1.
28.11.2017 16:09:55 end bat


Если требуется логировать выполнение каждой команды(и не только на копирование), в указанном формате, то необходимо каждую команду оборачивать в процедуру или можно как то изящнее решить вопрос?

Последний раз редактировалось Pank, 28-11-2017 в 16:16. Причина: уточнение


Отправлено: 16:15, 28-11-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Pank:
Если требуется логировать выполнение каждой команды(и не только на копирование), в указанном формате, то необходимо каждую команду оборачивать в процедуру или можно как то изящнее решить вопрос? »
Ключевое слово здесь — «в указанном формате». Если не требуется предваряющее дата/время, то можно банально перенаправить стандартный поток вывода в файл для всего пакетного файла целиком.

Отправлено: 16:25, 28-11-2017 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Если не требуется предваряющее дата/время, то можно банально перенаправить стандартный поток вывода в файл для всего пакетного файла целиком. »
Нет, нужно именно чтобы дата-время потом результат команды.
Если использовать & то результаты выполнения команд идут на разных строках, нельзя сделать так чтобы выводилось одной строкой? Может какой-то другой выход есть?

Отправлено: 16:29, 28-11-2017 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Pank:
Если использовать & то результаты выполнения команд идут на разных строках, »
И если не использовать «&» — то тоже на разных.

Отправлено: 16:53, 28-11-2017 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Логирование выполнения команд с датой и временем

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Ping со временем и датой The_Immortal Скриптовые языки администрирования Windows 33 26-07-2022 13:02
CMD/BAT - [решено] Запуск программы и отправка в нее команд со временем probelp Скриптовые языки администрирования Windows 14 20-12-2013 14:50
Логирование выполнения скрипта Alkantel AutoIt 3 30-08-2013 13:36
CMD/BAT - Работа с датой, временем alexey_vf Скриптовые языки администрирования Windows 9 05-06-2013 04:52
CMD/BAT - Проверка на выполнения команд в bat ? men232 Скриптовые языки администрирования Windows 4 12-01-2011 22:23




 
Переход