Показать полную графическую версию : Запись в лог русскими буквами.
Нужно вести лог, который находится в папке "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»?
Другой Ваш вариант выглядит чересчур надуманным. Отчего Вы так не любите простое «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, cmd /v:on /c я использую, причём успешно, для сложного парсинга текста. И дело тут не только в восклицательных знаках, хотя это тоже немаловажно. Например, из нижеприведённых кодов пакетных файлов с поставленной задачей справится только код третьего пакетного файла, где используется как раз cmd /v:on /c.
Примеры:
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 (http://forum.oszone.net/post-2402855-12.html) — так и не понял, в чём его преимущества по сравнению с кодом из #5 (http://forum.oszone.net/post-2402701-5.html).
kiripanda
15-09-2014, 21:19
Также могу предложить такие варианты: »
@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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.