【问题标题】:Dynamic nested environment variable in batch批量动态嵌套环境变量
【发布时间】:2012-09-25 20:21:22
【问题描述】:

我想在日志中添加时间和用户名,但我无法动态评估 %TIME% 和 %DATE%。我已经尝试了许多使用“!”的版本,但我从来没有让它工作。我想要的是拥有

Setlocal EnableDelayedExpansion
set nameDateTime=!%USERNAME% %DATE% %TIME%!
echo %nameDateTime%
echo %nameDateTime%
echo %nameDateTime%
EndLocal

产生 3 个不同的时间(假设它们之间的距离足够远)。 我尝试了第二个答案:How to create a user Environment variable that *calls* %date% or %time% each time it's invoked?,但是当我调用 echo %date1% 时,它只打印出 date1,而 set date1 打印出整个 !date1..!行。

【问题讨论】:

    标签: dynamic batch-file environment-variables


    【解决方案1】:

    既然你已经使用了delayedExpansion:

    @echo off
    Setlocal DisableDelayedExpansion
    set nameDateTime=!USERNAME! !DATE! !TIME!
    Setlocal EnableDelayedExpansion
    echo %nameDateTime%
    echo %nameDateTime%
    echo %nameDateTime%
    EndLocal
    

    您需要对这些回声进行时间间隔,以查看它们实际打印不同的值

    【讨论】:

    • 当我运行时: echo %nameDateTime% 我得到 !USERNAME! !日期! !时间!作为输出。
    • @dale 以上只能批量工作。你想直接从命令行运行吗?
    • 不,我不需要它在 cmd 行上工作,只是没有那样运行它。
    • 谢谢@wmz,它成功了,我猜我有一些可以工作的东西,我只是没有使用批处理文件。
    • @dale 另一种可能性(如果以 cmd /v:on 开头,这也可以从 cmd 开始)启用延迟扩展,您可以转义 !:set "nameDateTime=^!USERNAME^! ^!DATE^! ^!TIME^!"(注意引号)。
    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2019-04-09
    相关资源
    最近更新 更多