从第二批调用时批处理文件的日志文件时间戳很奇怪,在筒仓中工作正确

时间:2015-11-20 14:38:50

标签: windows datetime batch-file logfile

我创建了两个名为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但是当我在upload_file.bat中调用它时,日志显示SetEnv_1-20-5--20-1444

我没有理由背后的原因。我能得到任何帮助吗?

1 个答案:

答案 0 :(得分:1)

当您致电SetEnv.bat时,您已经在%DATE%脚本中格式化了%TIME%upload_file.bat个变量,因此您在通话中应用了格式SetEnv.bat与价值观有关:

  

2015-11-20(日期)

     

135220(时间)

我建议不要使用系统%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%是否已有值。如果是这样,它将继续前进而不重新计算。否则它将计算值。

此方法允许您在一个脚本中设置时间戳,然后所有其他脚本将使用它而无需重新定义,因此您将获得一致的时间戳。