简体   繁体   English

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

[英]Log file time stamp of a batch file is weird when called from second batch, work correct in silo

I have created 2 batch files called SetEnv.bat and Upload_File.bat. 我创建了2个批处理文件,分别称为SetEnv.bat和Upload_File.bat。 The upload_file.bat contains the SetEnv.bat to call first and then process other lines. upload_file.bat包含SetEnv.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: 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
    ---------------------
    ---------------------
    ---------------------

Now the question is when I run SetEnv.bat outside of Upload_file.bat, it creates log file as SetEnv_2015-11-20-135220.log but When I call it inside the upload_file.bat, the log is showing SetEnv_1-20-5--20-1444 . 现在的问题是,当我在Upload_file.bat外部运行SetEnv.bat时,它将创建日志文件为SetEnv_2015-11-20-135220.log但是当我在upload_file.bat内部调用它时,日志显示SetEnv_1-20-5--20-1444

I am not getting the reason behind it. 我不明白背后的原因。 Can I get any help? 我可以帮忙吗?

When you make your call to SetEnv.bat , you have already formatted the %DATE% and %TIME% variables in your upload_file.bat script, so the formatting you apply within your call to SetEnv.bat is with respect to values: 调用SetEnv.bat ,已经在upload_file.bat脚本中格式化了%DATE%%TIME%变量,因此在对SetEnv.bat的调用中应用的格式化是关于值的:

2015-11-20 (for Date) 2015-11-20(日期)

135220 (for Time) 135220(用于时间)

I would suggest not using the system %Date% and %Time% variables - instead use your own so you can detect if they have already been set: 我建议不要使用系统%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

The above will first check to see if %LogDATE% and %LogTIME% already have a value. 上面将首先检查以查看%LogDATE%%LogTIME%已经有一个值。 If so, it will move on without recalcuating. 如果是这样,它将继续运行而无需重新计算。 Otherwise it will calculate the values. 否则它将计算这些值。

This method allows you to set the timestamp in one script and then all other scripts will use it without redefining so you are going to get a consistent timestamp. 此方法允许您在一个脚本中设置时间戳,然后所有其他脚本将使用该时间戳而无需重新定义,因此您将获得一致的时间戳。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM