我需要在我正在处理的批处理脚本中添加一些函数。这些功能需要执行以下操作。
1)阅读并检查当前日期。
2)为日志文件设置自己的变量。
3)将日志文件命名如下(log%of the the week%.txt)示例:log24.txt
4)条件语句:如果日志文件超过30天,则覆盖它。如果不超过30天,请附加。
我们要做的是每次脚本运行时都将信息写入日志文件。
理想过程
脚本运行,看到今天没有设置日志文件。创建名为log24.txt的日志文件。该文件在当天被多次写入并被附加。
该脚本在第二天(2014年2月25日)运行,并创建一个名为log25.txt的日志文件。该文件在当天被多次写入并被附加。
记录轮换功能
脚本应检查过去30天内创建的所有文件。所以假设现在是03/24/14。该函数应该看到已经有一个log24.txt并用新的03/24/14覆盖该文件中的02/24/14内容。
这个想法是让这些日志可用30天,然后覆盖自己以防止它们变得太大。
任何想法都会受到赞赏。
答案 0 :(得分:0)
试试这个:
@echo off
setlocal
Call :RotatingLog "This is a test"
exit /b
:RotatingLog <text>
for /f "tokens=2 delims==" %%a in (
'wmic OS Get localdatetime /value'
) do set "dt=%%a"
set "DD=%dt:~6,2%" & set "MM=%dt:~4,2%"
set "logfile=Log%DD%.txt"
if exist %logfile% (
for %%a in (%logfile%) do (
for /f "Tokens=1 delims=/" %%b in ("%%~ta") do (
if %%b EQU %MM% (echo %~1>>%logfile%
) ELSE (
echo %~1>%logfile%)
)
)
)
exit /b
答案 1 :(得分:0)
这只能从vista和后来的操作系统本地工作,因为robocopy用于日期操作,检索一天没有问题的Windows本地化(和日期变量内容结构)或需要管理员权限(wmic),以及确定是否需要旋转日志文件。当然,如果需要,您可以从Windows Server 2003资源工具包工具(downloadable from microsoft)获取robocopy的副本,以便在XP中使用。
此代码不用于连续执行,因为日检索和日志轮换仅在批量启动时完成。根据需要进行调整。
@echo off
setlocal enableextensions disabledelayedexpansion
:: retrieve log file name, adjust log path and rotate if necessary
call :getLogFilename logFile
set "logFile=%cd%\%logFile%"
call :logRotate "%logFile%"
:: Now, append to log as needed
echo %time% Something >> "%logFile%"
( for /l %%a in (1 1 10) do echo %time% This is line numer %%a ) >> "%logFile%"
endlocal
exit /b
:getLogFilename returnVariable
setlocal enableextensions enabledelayedexpansion
set "day=" & for /f "tokens=*" %%a in ('robocopy^|find " : "') do for %%b in (%%a) do if not defined day ( set /a "day=%%b0/10" 2>nul & if !day!==0 set "day=")
endlocal & if not "%~1"=="" set "%~1=log%day%.txt" & exit /b
:logRotate logfile
setlocal enableextensions
robocopy "%~dp1." "%~dp1." "%~nx1" /njh /njs /ndl /is /minage:27 /l /nocopy | find ":\" >nul
if not errorlevel 1 break > "%~f1"
endlocal & exit /b