我有一个执行升级到数据库的脚本。
该脚本还会在升级开始之前进行日志记录,但是当此脚本尝试访问日志文件时,它会挂起一段不确定的时间。
引起问题的一行是:
%LOGMESSAGE% Start update %UPDVERSION% .
LOGMESSAGE是一个cmd文件,如下所示:
SETLOCAL enabledelayedexpansion
SET /A FT=500
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year
/Format:table') DO (
IF NOT !FT!==500 GOTO proceed
SET FD=%%F-%%D-%%A
SET FT=%%B:%%C:%%E
:proceed
SET /A FX="DS"
)
endlocal
LOGMESSAGE的主要功能是获取当前系统时间。
脚本写入的日志文件没有问题,LOGMESSAGE函数也没有问题,因为日志文件在调用行%LOGMESSAGE% Start update %UPDVERSION% .
之前写了很多次。该脚本似乎在许多其他计算机上没有任何麻烦,但我遇到一个服务器的问题,服务器正在运行Windows Server 2003 R2 SP2。
知道问题可能是什么?
答案 0 :(得分:1)
试试这个:
@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
SET /A FT=500
FOR /F "tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table^|find "20"') DO (
IF NOT !FT!==500 GOTO proceed
SET FD=%%F-%%D-%%A
SET FT=%%B:%%C:%%E
:proceed
SET /A FX="DS"
)
endlocal
答案 1 :(得分:0)
如果您只想获取日期和时间,可以使用
DATE /T
TIME /T
而不是WMI。
答案 2 :(得分:0)
三条评论:
.cmd
个文件很少见 - 通常会使用.bat
个文件。 两者之间存在微小的差异,但我不确定它们是否相关(我再也记不起它们了......)
在开盘单引号之前和结束之后有一个换行符是完全合法的。在命令中间休息,我不确定 - 不是说 IS 是一个问题,但它很容易消除。
我不再确定,因为我很少再使用XP,而且从不使用S2003 - 但ISTR在块语句中有标签时出现问题。标签似乎结束了。
所以 - 我建议
使用
将例程作为.bat
而不是.cmd
运行
for...(
'whatever whatever...'
) do (
结构,并在子例程中实现FD
,FT
和FX
内发生的任何异常情况。