我有一个批处理脚本用于显示文件的修改日期列表&时间。解析修改日期和时间
这是脚本代码:
for %%v in (*.html) do (
echo %%~tv
)
的问题是,我该如何解析结果为两个变量。每个日期和时间连续。
请指教。
问候,
迪诺
我有一个批处理脚本用于显示文件的修改日期列表&时间。解析修改日期和时间
这是脚本代码:
for %%v in (*.html) do (
echo %%~tv
)
的问题是,我该如何解析结果为两个变量。每个日期和时间连续。
请指教。
问候,
迪诺
如果我要解决这样的问题我自己,我会做到以下几点:
我会跑你那剧本看什么输出它产生。说实话,我有运行该脚本,这里是我得到了什么:那么
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
我的下一步将是确定(视觉)是每个字符串的一部分是日期和哪一部分是时候,我的意思是,子串的起始位置和长度是多少。
对我来说,这似乎是...(这里是我的尺子?)
1 1
0 5 0 5
||||||||||||||||||||
04/10/2010 02:07 PM
是啊,位置0,日期和位置11,长度为8的时间长度为10。 (正如你所看到的,对于批处理脚本中的字符串,我有一个从0开始的特殊标尺。)
现在我知道在输出中找到日期和时间,我可以相应地提取它们。但首先我需要一个整个字符串的变量,因为提取应用于环境变量,而不是循环变量。在这里:
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%
)
它是行不通的。事情是,%datetime:…%
表达式将在调用循环之前在之前评估,因此会产生空字符串。 (这种行为的特殊性适用于所有在圆括号中有一堆命令的情况,无论是FOR
循环,IF
还是IF..ELSE
命令,或者甚至仅应用于一组命令的重定向,如>file (commands)
)。
而不是仅仅输出,你可以将它们存储在其他变量后的循环体来处理值:
SETLOCAL EnableDelayedExpansion
FOR %%v IN (*.html) DO (
SET datetime=%%~tv
SET fdate=!datetime:~0,10!
SET ftime=!datetime:~11,8!
:: now do whatever you like with !fdate! and !ftime!
…
)
ENDLOCAL
嗨Andiy,伟大的答案和解释。只有最后一个注释的修改,我正在使用!fdate!和!ftime!而不是%fdate%和%ftime%。非常感谢 !迪诺。 – Dino 2011-06-04 15:30:49
@Dino:很好,相应地更新了我的答案。谢谢你提到它。 – 2011-06-04 17:24:47