我有一个批处理脚本用于显示文件列表的修改日期&时间。
这是脚本的代码:
for %%v in (*.html) do (
echo %%~tv
)
问题是,如何将结果解析为两个变量。每个日期和时间连续。
请建议。
此致
恐龙
答案 0 :(得分:3)
如果我要为自己解决这个问题,我会做以下事情:
我会运行你的脚本来查看它产生的输出。说实话,我已经运行该脚本,这就是我所拥有的:
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的长度10,时间的长度8。 (如您所见,对于批处理脚本中的字符串,我有一个从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%
)
不起作用。问题是,{<1}}表达式将在调用循环之前进行评估,从而产生空字符串。 (这种行为的特殊性适用于括号中有大量命令的所有情况,无论是%datetime:…%
循环,FOR
还是IF
命令,还是仅应用重定向一组命令,如IF..ELSE
。)
不是只输出值,而是将它们存储在其他变量中以便稍后在循环体中处理:
>file (commands)