python脚本在批处理文件中弄乱了%time%
我使用的是一个批处理文件,我定期在其中写入时间用于性能监控。这很有效,但最近我在该批处理文件中调用了一个Python脚本,时间度量似乎不再有效:python脚本在批处理文件中弄乱了%time%,python,batch-file,windows-7,Python,Batch File,Windows 7,我使用的是一个批处理文件,我定期在其中写入时间用于性能监控。这很有效,但最近我在该批处理文件中调用了一个Python脚本,时间度量似乎不再有效: 我的批处理文件如下所示: echo [%TIME%] -- task 1 <perform task 1> echo [%TIME%] -- task 2 <perform task 2> echo [%TIME%] -- finished 现在我已经用Python脚本(至少需要几分钟)代替了它,但我的%TIME%变量似乎不再
我的批处理文件如下所示:
echo [%TIME%] -- task 1
<perform task 1>
echo [%TIME%] -- task 2
<perform task 2>
echo [%TIME%] -- finished
现在我已经用Python脚本(至少需要几分钟)代替了它,但我的%TIME%变量似乎不再更新了:
echo [%TIME%] -- task 1
<perform task 1>
echo [%TIME%] -- task 2
python task2.py
echo [%TIME%] -- finished
有人知道是什么导致了这个问题以及如何解决吗?仅供参考,我正在使用虚拟Windows 7系统,Python安装版本为3.5.0。我相信这个问题与Python无关。例如脚本
@echo off
echo [%TIME%] ---
echo [%TIME%] ping1
ping 8.8.8.8 >nul
echo [%TIME%] ping1 done
if not exist 123 (
echo [%TIME%] ping2
ping 8.8.8.8 >nul
echo [%TIME%] ping2 done
)
echo [%TIME%] ping3
ping 8.8.8.8 >nul
echo [%TIME%] ping3 done
echo [%TIME%] ---
将输出
[20:33:32,00] ---
[20:33:32,00] ping1
[20:33:35,04] ping1 done
[20:33:35,04] ping2
[20:33:35,04] ping2 done
[20:33:38,12] ping3
[20:33:41,16] ping3 done
[20:33:41,16] ---
如您所见,ping2
和ping2 done
具有相同的时间戳。使用括号(
)
时,CMD shell将展开[读取]代码块开头的所有变量,并使用这些值,即使变量值在代码块内发生更改
因此,在这种情况下,解决方案是
if not exist 123 (
call echo [%%TIME%%] ping2
ping 8.8.8.8 >nul
call echo [%%TIME%%] ping2 done
)
或
输出是
[20:45:28,45] ---
[20:45:28,45] ping1
[20:45:31,49] ping1 done
[20:45:31,49] ping2
[20:45:34,53] ping2 done
[20:45:34,54] ping3
[20:45:37,59] ping3 done
[20:45:37,59] ---
我相信这个问题与python无关。例如脚本
@echo off
echo [%TIME%] ---
echo [%TIME%] ping1
ping 8.8.8.8 >nul
echo [%TIME%] ping1 done
if not exist 123 (
echo [%TIME%] ping2
ping 8.8.8.8 >nul
echo [%TIME%] ping2 done
)
echo [%TIME%] ping3
ping 8.8.8.8 >nul
echo [%TIME%] ping3 done
echo [%TIME%] ---
将输出
[20:33:32,00] ---
[20:33:32,00] ping1
[20:33:35,04] ping1 done
[20:33:35,04] ping2
[20:33:35,04] ping2 done
[20:33:38,12] ping3
[20:33:41,16] ping3 done
[20:33:41,16] ---
如您所见,ping2
和ping2 done
具有相同的时间戳。使用括号(
)
时,CMD shell将展开[读取]代码块开头的所有变量,并使用这些值,即使变量值在代码块内发生更改
因此,在这种情况下,解决方案是
if not exist 123 (
call echo [%%TIME%%] ping2
ping 8.8.8.8 >nul
call echo [%%TIME%%] ping2 done
)
或
输出是
[20:45:28,45] ---
[20:45:28,45] ping1
[20:45:31,49] ping1 done
[20:45:31,49] ping2
[20:45:34,53] ping2 done
[20:45:34,54] ping3
[20:45:37,59] ping3 done
[20:45:37,59] ---
这是您的实际代码,还是您遗漏了一些位?因为我几乎可以保证在一组括号中有
%TIME%
,这就是它没有更新的原因。请尝试调用echo[%%%TIME%%]
谢谢您的快速评论。与此同时,我发现这个问题比最初看起来要复杂得多,我正在进行更深入的分析,以缩小问题的范围。我将相应地编辑原始问题,并在获得更多信息后尽快回到这个问题。同时,我可以告诉你,括号是出于可读性的原因而存在的,它们不会影响行为。至于%%TIME%%
,这似乎不起作用。这是您的实际代码,还是您遗漏了一些位?因为我几乎可以保证在一组括号中有%TIME%
,这就是它没有更新的原因。请尝试调用echo[%%%TIME%%]
谢谢您的快速评论。与此同时,我发现这个问题比最初看起来要复杂得多,我正在进行更深入的分析,以缩小问题的范围。我将相应地编辑原始问题,并在获得更多信息后尽快回到这个问题。同时,我可以告诉你,括号是出于可读性的原因而存在的,它们不会影响行为。至于%%TIME%%
,这似乎不起作用。非常感谢,Dmity,我在脚本中实现了这一点,现在一切都很好。非常感谢,Dmity,我在脚本中实现了这一点,现在一切都很好。