Dynamic 批处理中的动态嵌套环境变量

Dynamic 批处理中的动态嵌套环境变量,dynamic,batch-file,environment-variables,Dynamic,Batch File,Environment Variables,我希望日志包含时间和用户名的前缀,但我无法动态计算%time%和%DATE%。我尝试过使用“!”的多种版本,但从未成功过。我想要的是 Setlocal EnableDelayedExpansion set nameDateTime=!%USERNAME% %DATE% %TIME%! echo %nameDateTime% echo %nameDateTime% echo %nameDateTime% EndLocal 产生3个不同的时间(假设它们之间的距离足够远)。 我在中尝试了第二个答案:

我希望日志包含时间和用户名的前缀,但我无法动态计算%time%和%DATE%。我尝试过使用“!”的多种版本,但从未成功过。我想要的是

Setlocal EnableDelayedExpansion
set nameDateTime=!%USERNAME% %DATE% %TIME%!
echo %nameDateTime%
echo %nameDateTime%
echo %nameDateTime%
EndLocal
产生3个不同的时间(假设它们之间的距离足够远)。
我在中尝试了第二个答案:,但当我调用echo%date1%时,它只打印出date1,而set date1打印出整个!日期1。。!行。

因为您已经使用了延迟扩展:

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

由于您已经使用了delayedExpansion,因此您需要对这些回声进行时间间隔,以查看它们是否实际打印了不同的值:

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

当我运行时,您需要给这些echo留出时间间隔,以查看它们是否实际打印了不同的值

:echo%nameDateTime%I get!用户名!日期时间作为输出,上面的@dale只能批量工作。你想直接从cmd行运行它吗?不,我不需要它在cmd行上运行,只是没有那样运行。谢谢@wmz,它运行了,我猜我有一些东西可以运行,我只是没有使用批处理文件。@dale另一种可能(如果从
cmd/v:on
开始,这也可以从cmd运行)启用延迟扩展,你可以逃脱
设置“nameDateTime=^!USERNAME^!^!DATE^!^!TIME^!”
(注意引号)。当我运行时:echo%nameDateTime%我得到了!用户名!日期时间作为输出,上面的@dale只能批量工作。你想直接从cmd行运行它吗?不,我不需要它在cmd行上运行,只是没有那样运行。谢谢@wmz,它运行了,我猜我有一些东西可以运行,我只是没有使用批处理文件。@dale另一种可能(如果从
cmd/v:on
开始,这也可以从cmd运行)启用延迟扩展,你可以逃脱
设置“nameDateTime=^!用户名^!^!日期^!^!时间^!”
(注意引号)。