Запись в лог русскими буквами.
Нужно вести лог, который находится в папке "C:\Soft\Other\Scripts\Logs\" примерно такого вида:
Код:
=======
14.09.2014 17:01 Началось обновление комплекта №1
14.09.2014 17:12 Завершилось обновление комплекта №1
=======
С написанием скриптов у меня очень плохо.
И как писать Кириллицу в логи я тоже не знаю.
|
Как-то так:
Код:
@echo off
>"example.log" (
echo =======
set /p="%date% "<nul& @for /f %%i in ('time /t') do @echo %%i Началось обновление комплекта №1
start "" /wait "example.exe"
set /p="%date% "<nul& @for /f %%i in ('time /t') do @echo %%i Завершилось обновление комплекта №1
echo =======
)
exit /b
.
|
Georgio, а можешь приписать, чтобы в папку нужную писал?
|
Код:
@echo off
:: Полный путь к LOG-файлу:
>"C:\Soft\Other\Scripts\Logs\example.log" (
echo =======
set /p="%date% "<nul& @for /f %%i in ('time /t') do @echo %%i Началось обновление комплекта №1
:: Пример запуска программы:
start "" /wait "D:\Test\example.exe"
set /p="%date% "<nul& @for /f %%i in ('time /t') do @echo %%i Завершилось обновление комплекта №1
echo =======
)
exit /b
|
Georgio, почему не просто:
Код:
echo %date% %time:~0,5% Мама мыла раму
?
|
Iska, смотрите:
Код:
@echo off
>"example.log" (
set /p="%date% "<nul& for /f %%i in ('time /t') do echo %%i Мама мыла раму.
timeout /t 60 /nobreak>nul
set /p="%date% "<nul& for /f %%i in ('time /t') do echo %%i Мама мыла раму.
)
exit /b
.
Результат:
Код:
14.09.2014 15:07 Мама мыла раму.
14.09.2014 15:08 Мама мыла раму.
.
И теперь смотрите:
Код:
@echo off
>"example.log" (
echo %date% %time:~0,5% Мама мыла раму.
timeout /t 60 /nobreak>nul
echo %date% %time:~0,5% Мама мыла раму.
)
exit /b
.
Результат:
Код:
14.09.2014 15:10 Мама мыла раму.
14.09.2014 15:10 Мама мыла раму.
.
То есть по-хорошему надо было использовать и "date /t".
Также могу предложить такие варианты:
Код:
@echo off
>"example.log" (
cmd /v:on /c echo !date! !time:~0,5! Мама мыла раму.
timeout /t 60 /nobreak>nul
cmd /v:on /c echo !date! !time:~0,5! Мама мыла раму.
)
exit /b
и
Код:
@echo off
>"example.log" (
call echo %%date%% %%time:~0,5%% Мама мыла раму.
timeout /t 60 /nobreak>nul
call echo %%date%% %%time:~0,5%% Мама мыла раму.
)
exit /b
.
|
Georgio, я как-то не вижу разницы... :unsure:
|
i-Lex, просто в одном случае везде будет фигурировать только одно и то же время -- время запуска программы, а в других случаях время будет меняться, как это и положено.
|
Georgio, так это тот же самый типичный случай — надо пользовать либо отложенное раскрытие переменных окружения и «!» вместо «%», либо двойной раскрытие переменных окружения через «call echo %%date%% %%time%% …». Второй вариант Вы озвучили.
Другой Ваш вариант выглядит чересчур надуманным. Отчего Вы так не любите простое «setlocal enableextensions enabledelayedexpansion»?
|
Цитата:
Цитата Iska
Другой Ваш вариант выглядит чересчур надуманным. Отчего Вы так не любите простое «setlocal enableextensions enabledelayedexpansion»? »
|
Iska, просто сравните:
Код:
:: !!!Мама мыла раму!!!
@echo off
chcp 1251>nul
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%i in ("%~f0") do chcp 866>nul& echo %%i& endlocal& pause>nul& exit /b
и
Код:
:: !!!Мама мыла раму!!!
@echo off
chcp 1251>nul
:setlocal enabledelayedexpansion
for /f "usebackq delims=" %%i in ("%~f0") do chcp 866>nul& cmd /v:on /c echo %%i& pause>nul& exit /b
.
|
Сравнил:
Код:
E:\Песочница\0398>0001.cmd
::
E:\Песочница\0398>0002.cmd
::
Разницы не увидел ;). Поясню: у меня отложенное раскрытие задано по умолчанию на уровне реестра, посему пришлось во втором случае исправить на «setlocal disabledelayedexpansion» дабы увидеть. Увидел:
Код:
:: !!!Њ*¬* ¬л«* а*¬г!!!
но так и не понял Вашу мысль.
|
Цитата:
Цитата Iska
но так и не понял Вашу мысль. »
|
Iska, я использую, причём успешно, для сложного парсинга текста. И дело тут не только в восклицательных знаках, хотя это тоже немаловажно. Например, из нижеприведённых кодов пакетных файлов с поставленной задачей справится только код третьего пакетного файла, где используется как раз .
Примеры:
1)
Код:
:: & Мама мыла раму.
@echo off
chcp 1251>nul
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%i in ("%~f0") do (
set string=%%i|
chcp 866>nul
echo !string: =$!| findstr "^:"
chcp 1251>nul
)
endlocal
pause>nul
exit /b
;
2)
Код:
:: & Мама мыла раму.
@echo off
chcp 1251>nul
setlocal disabledelayedexpansion
for /f "usebackq delims=" %%i in ("%~f0") do (
set string=%%i
chcp 866>nul
call echo %%string: =$%%| findstr "^:"
chcp 1251>nul
)
endlocal
pause>nul
exit /b
;
3)
Код:
:: & Мама мыла раму.
@echo off
chcp 1251>nul
setlocal disabledelayedexpansion
for /f "usebackq delims=" %%i in ("%~f0") do (
set string=%%i
chcp 866>nul
cmd /v:on /c echo !string: =$!| findstr "^:"
chcp 1251>nul
)
endlocal
pause>nul
exit /b
.
|
Эм...
Какой из этих скриптов будет писать кириллицу и меньше будет проблем на Win 2003 ?
|
i-Lex, для Вашей задачи попробуйте так:
Код:
@echo off
:: Полный путь к LOG-файлу:
"C:\Soft\Other\Scripts\Logs\example.log"> (
echo =======
@(for /f %%i in ('date /t^& time /t') do @set /p="%%i "<nul)& echo Началось обновление комплекта №1
:: Пример запуска программы:
start "" /wait "D:\Test\example.exe"
@(for /f %%i in ('date /t^& time /t') do @set /p="%%i "<nul)& echo Завершилось обновление комплекта №1
echo =======
)
exit /b
.
|
Georgio, по посту #12 — так и не понял, в чём его преимущества по сравнению с кодом из #5.
|
Цитата:
Также могу предложить такие варианты: »
|
Код:
@echo off
:: Полный путь к LOG-файлу:
>>"Z:\Soft\Other\Scripts\Logs\example.log" (
echo =======
call :time Началось обновление комплекта №1
:: Пример запуска программы:
start "" /wait "D:\Test\example.exe"
call :time Завершилось обновление комплекта №1
echo =======
)
exit /b
:time
echo %date% %time:~0,5% %*
goto :eof
|
Время: 14:00.
© OSzone.net 2001-