解析修改日期&时间

时间:2011-06-04 07:38:47

标签: batch-file

我有一个批处理脚本用于显示文件列表的修改日期&时间。

这是脚本的代码:

for %%v in (*.html) do ( 
    echo %%~tv
)

问题是,如何将结果解析为两个变量。每个日期和时间连续。

请建议。

此致

恐龙

1 个答案:

答案 0 :(得分:3)

如果我要为自己解决这个问题,我会做以下事情:

  1. 我会运行你的脚本来查看它产生的输出。说实话,我已经运行该脚本,这就是我所拥有的:

    12/15/2009 08:54 AM
    12/15/2009 09:30 AM
    05/31/2011 07:35 PM
    12/02/2009 05:53 PM
    12/19/2009 09:33 PM
    04/10/2010 02:07 PM
    11/23/2010 03:21 PM
    01/06/2010 12:03 PM
    
  2. 我的下一步是(视觉上)确定每个字符串的哪个部分是日期,哪个部分是时间,我的意思是,子字符串的起始位置和长度是多少。

    在我的情况下,它似乎是......(我的标尺在哪里?)

              1    1
    0    5    0    5    
    ||||||||||||||||||||
    04/10/2010 02:07 PM
    

    啊是的,位置0,日期和位置11的长度10,时间的长度8。 (如您所见,对于批处理脚本中的字符串,我有一个从0开始的特殊标尺。)

  3. 现在我知道在输出中找到日期和时间的位置,我可以相应地提取它们。但首先我需要一个变量用于整个字符串,因为提取应用于环境变量,而不是循环变量。这里:

    SETLOCAL EnableDelayedExpansion
    FOR %%v IN (*.html) DO ( 
      SET datetime=%%~tv
      ECHO !datetime:~0,10!
      ECHO !datetime:~11,8!
    )
    ENDLOCAL
    

    您可能已经注意到,除了引入变量之外,我还添加了启用延迟扩展(变量)。这是必要的,因为立即扩展,即像这样:

    FOR %%v IN (*.html) DO ( 
      SET datetime=%%~tv
      ECHO %datetime:~0,10%
      ECHO %datetime:~11,8%
    )
    

    不起作用。问题是,{<1}}表达式将在调用循环之前进行评估,从而产生空字符串。 (这种行为的特殊性适用于括号中有大量命令的所有情况,无论是%datetime:…%循环,FOR还是IF命令,还是仅应用重定向一组命令,如IF..ELSE。)

    不是只输出值,而是将它们存储在其他变量中以便稍后在循环体中处理:

    >file (commands)