我完全不熟悉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)
请问任何建议?
答案 0 :(得分: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%
获得的格式,以及您想要的格式,我(或其他人)可以提供更多帮助。< / p>