Windows命令提示符无限期挂起

时间:2013-11-27 09:46:59

标签: batch-file logging cmd

我有一个执行升级到数据库的脚本。

该脚本还会在升级开始之前进行日志记录,但是当此脚本尝试访问日志文件时,它会挂起一段不确定的时间。

引起问题的一行是:

 %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。

知道问题可能是什么?

3 个答案:

答案 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 (

结构,并在子例程中实现FDFTFX内发生的任何异常情况。