从第二批调用时,批处理文件的日志文件时间戳很奇怪,在筒仓中工作正常
Log file time stamp of a batch file is weird when called from second batch, work correct in silo
我创建了 2 个批处理文件,名为 SetEnv.bat 和 Upload_File.bat。 upload_file.bat 包含 SetEnv.bat 先调用再处理其他行。
SetEnv.bat:
@echo off
REM SET LOGFILE
SETLOCAL
SET DATE=%DATE:~-4%-%DATE:~-7,-5%-%DATE:~-10,-8%
SET TIME=%Time:~0,2%%Time:~3,2%%Time:~6,2%
SET LOGFILE=%~dp0\Logs\SetEnv_%DATE%-%TIME%.log
CALL :Logit > %LOGFILE%
EXIT /b 0
:Logit
REM SET PARAMETERS
SET LOGINID=******
SET PASSWORD=C:\Users\xyz\pwd.epw
SET URL=https://example.com
SET DOMAIN=abc
REM APPLICATION LOGIN`enter code here`
CALL epmautomate login %LOGINID% %PASSWORD% %URL% %DOMAIN%
IF %ERRORLEVEL% NEQ 0 (
ECHO Login into source environment failed with error %ERRORLEVEL%.
GOTO :END
)
:END
SET returnValue=%ERRORLEVEL%
EXIT /B %returnValue%
upload_file.bat:
@echo off
REM SET LOGFILE
SETLOCAL
SET DATE=%DATE:~-4%-%DATE:~-7,-5%-%DATE:~-10,-8%
SET TIME=%Time:~0,2%%Time:~3,2%%Time:~6,2%
SET LOGFILE=%~dp0\Logs\Upload_GL_%DATE%-%TIME%.log
CALL :Logit > %LOGFILE%
EXIT /b 0
:Logit
REM LOGIN TO APPLICATION
CALL SetEnv.bat
REM OTHER LINES OF CODES
---------------------
---------------------
---------------------
现在的问题是,当我在 Upload_file.bat 之外 运行 SetEnv.bat 时,它会创建日志文件 SetEnv_2015-11-20-135220.log
但是当我在 [=30= 内部调用它时], 日志显示 SetEnv_1-20-5--20-1444
.
我不明白背后的原因。我能得到什么帮助吗?
当您调用 SetEnv.bat
时,您已经在 upload_file.bat
脚本中格式化了 %DATE%
和 %TIME%
变量,因此您在调用 SetEnv.bat
是关于值:
2015-11-20 (for Date)
135220 (for Time)
我建议不要使用系统 %Date%
和 %Time%
变量 - 而是使用您自己的变量,以便您可以检测它们是否已经设置:
IF NOT DEFINED LogDATE SET LogDATE=%DATE:~-4%-%DATE:~-7,-5%-%DATE:~-10,-8%
IF NOT DEFINED LogTIME SET LogTIME=%Time:~0,2%%Time:~3,2%%Time:~6,2%
SET LOGFILE=%~dp0\Logs\Upload_GL_%LogDATE%-%LogTIME%.log
上面会先检查%LogDATE%
和%LogTIME%
是否已经有值。如果是这样,它将继续前进而无需重新计算。否则它将计算值。
此方法允许您在一个脚本中设置时间戳,然后所有其他脚本将使用它而无需重新定义,因此您将获得一致的时间戳。
我创建了 2 个批处理文件,名为 SetEnv.bat 和 Upload_File.bat。 upload_file.bat 包含 SetEnv.bat 先调用再处理其他行。
SetEnv.bat:
@echo off
REM SET LOGFILE
SETLOCAL
SET DATE=%DATE:~-4%-%DATE:~-7,-5%-%DATE:~-10,-8%
SET TIME=%Time:~0,2%%Time:~3,2%%Time:~6,2%
SET LOGFILE=%~dp0\Logs\SetEnv_%DATE%-%TIME%.log
CALL :Logit > %LOGFILE%
EXIT /b 0
:Logit
REM SET PARAMETERS
SET LOGINID=******
SET PASSWORD=C:\Users\xyz\pwd.epw
SET URL=https://example.com
SET DOMAIN=abc
REM APPLICATION LOGIN`enter code here`
CALL epmautomate login %LOGINID% %PASSWORD% %URL% %DOMAIN%
IF %ERRORLEVEL% NEQ 0 (
ECHO Login into source environment failed with error %ERRORLEVEL%.
GOTO :END
)
:END
SET returnValue=%ERRORLEVEL%
EXIT /B %returnValue%
upload_file.bat:
@echo off
REM SET LOGFILE
SETLOCAL
SET DATE=%DATE:~-4%-%DATE:~-7,-5%-%DATE:~-10,-8%
SET TIME=%Time:~0,2%%Time:~3,2%%Time:~6,2%
SET LOGFILE=%~dp0\Logs\Upload_GL_%DATE%-%TIME%.log
CALL :Logit > %LOGFILE%
EXIT /b 0
:Logit
REM LOGIN TO APPLICATION
CALL SetEnv.bat
REM OTHER LINES OF CODES
---------------------
---------------------
---------------------
现在的问题是,当我在 Upload_file.bat 之外 运行 SetEnv.bat 时,它会创建日志文件 SetEnv_2015-11-20-135220.log
但是当我在 [=30= 内部调用它时], 日志显示 SetEnv_1-20-5--20-1444
.
我不明白背后的原因。我能得到什么帮助吗?
当您调用 SetEnv.bat
时,您已经在 upload_file.bat
脚本中格式化了 %DATE%
和 %TIME%
变量,因此您在调用 SetEnv.bat
是关于值:
2015-11-20 (for Date)
135220 (for Time)
我建议不要使用系统 %Date%
和 %Time%
变量 - 而是使用您自己的变量,以便您可以检测它们是否已经设置:
IF NOT DEFINED LogDATE SET LogDATE=%DATE:~-4%-%DATE:~-7,-5%-%DATE:~-10,-8%
IF NOT DEFINED LogTIME SET LogTIME=%Time:~0,2%%Time:~3,2%%Time:~6,2%
SET LOGFILE=%~dp0\Logs\Upload_GL_%LogDATE%-%LogTIME%.log
上面会先检查%LogDATE%
和%LogTIME%
是否已经有值。如果是这样,它将继续前进而无需重新计算。否则它将计算值。
此方法允许您在一个脚本中设置时间戳,然后所有其他脚本将使用它而无需重新定义,因此您将获得一致的时间戳。