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

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%是否已经有值。如果是这样,它将继续前进而无需重新计算。否则它将计算值。

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