1

我对 Windows 脚本完全不熟悉——我可以粗略地阅读它并了解发生了什么,但在写作方面我基本上为零。这就是我想要做的。我有以下脚本

echo on

SET LOGNAME=%7
SET LOGNAME=%LOGNAME%.log

Set CURRDATE=%TEMP%\CURRDATE.TMP
Set CURRTIME=%TEMP%\CURRTIME.TMP

DATE /T > %CURRDATE%
TIME /T > %CURRTIME%

Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%l%%k%%j%%i

Set PARSEARG="eol=; tokens=1,2,3,4* delims=:,. "
For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMMSS=%%i%%j%%k%%l


sqlcmd -E -S %1 -d %2 -h-1 -b -w 1000 -Q "EXEC spTest %3,%4,%5 " -o %6Test_%YYYYMMDD%%HHMMSS%.DAT

IF ERRORLEVEL 1 GOTO FAILED

ECHO %YYYYMMDD% %HHMMSS% OK>>%LOGNAME%

GOTO END

:FAILED
ECHO %YYYYMMDD% %HHMMSS% FAILED>>%LOGNAME%

:END
EXIT /B %ERRORLEVEL%

不幸的是,文件的 YYYYMMDD 部分有时会丢失(不知道为什么会发生这种情况 - 非常罕见 - 我只能认为这可能是奇怪的网络故障)。我想要做的是有一个 if 语句,以便如果 YYYYMMDD 为空,我将其设置为某个默认日期。我在我的代码中插入了以下行 - 但这对我没有任何作用。

if %YYYYMMDD% ==" " (set %YYYYMMDD% =20990101)

请问有什么建议吗?

4

1 回答 1

2

您的 IF 语句失败有两个原因 - 比较错误,您的 SET 语法错误。我相信你想要:

if "%YYYYMMDD%"=="" (set YYYYMMDD=20990101)

但我不明白你为什么需要上述内容。我不知道你为什么会出现间歇性故障,但它应该是可以修复的。

我知道您现有的代码可以大大简化。无需使用临时文件来捕获 DATE 和 TIME 值。动态变量%DATE%%TIME%提供您需要的值。键入HELP SET可用动态变量的列表。并且FOR /F可以使用语法解析字符串IN("string")。键入HELP FOR命令的完整描述。

您的代码可以更改为如下所示:

for /F %PARSEARG% %%i in ("%DATE%") do set YYYYMMDD=%%l%%k%%j%%i

for /F %PARSEARG% %%i in ("%TIME%") do set HHMMSS=%%i%%j%%k%%l

您现有的 PARSEARG 定义对我来说看起来不正确,我认为作业可能也必须更改。由于我不知道您的语言环境设置或所需的输出格式,因此我无法确切告诉您如何更改它。

如果您无法弄清楚,请发布您使用%DATE%and获得%TIME%的格式以及您想要的格式,我(或其他人)可以进一步提供帮助。

于 2012-05-01T16:23:01.280 回答