2012-05-01 144 views
1

我完全不熟悉windows脚本 - 我可以粗略地阅读它,看看发生了什么,但是在编写时我基本上都是零。这是我想要做的。 我有以下脚本在windows批处理文件脚本中使用if语句

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% 

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

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

有什么建议吗?

回答

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%%TIME%以及您想要的格式发布您获得的格式,我(或其他人)可以进一步提供帮助。

+0

感谢您的回复 - 非常有帮助 – misricko