以下代码给出了预期的输出。
20152210
0242 AM
代码是:
@echo off
for /f "tokens=2,3,4 delims=/ " %%i in ('date /t') do set DATE=%%k%%j%%i
for /f "tokens=1,2,3 delims=:." %%i in ('time /t') do set TIME=%%i%%j%%k
echo %DATE%
echo %TIME%
我不理解部分delims=/ "
和delims=:."
,其中两个字符用作分隔符,而分隔符又提供了正确的输出。
有人可以向我解释部分delims=/ "
和delims=:."
吗?
答案 0 :(得分:0)
delims命令可以使用多个字符,例如,' abcd + efg + hijk; lmno; pqr'可以使用" delims =; +"分解(来自here)所以这里可以使用这两个字符,当它们到达时。不同部分中的一个或另一个。例如,时间可以写成22:03.30或22.03:30,它们可以工作。空格和斜线与日期,和:或。随着时间的推移。
正如评论所暗示的那样,最好将非系统变量用于您自己的代码:
@echo off
for /f "tokens=2,3,4 delims=/ " %%i in ('date /t') do set MYDATE=%%k%%j%%i
for /f "tokens=1,2,3 delims=:." %%i in ('time /t') do set MYTIME=%%i%%j%%k
echo %MYDATE%
echo %MYTIME%
答案 1 :(得分:0)
这里的关键是理解for
命令的某种神秘语法。如果您要编写大量批处理文件,请习惯于for
查看for /?
命令的帮助。肆意滥用for
命令是你如何通过批处理完成很多事情。
所以,让我们看看第一个命令:
for /f "tokens=2,3,4 delims=/ " %%i in ('date /t') do set MyDATE=%%k%%j%%i
我将介绍delims
选项。此选项指定要在命令'date /t'
中指定的值中查找的分隔符。换句话说,就是你如何告诉for命令令牌所在的位置。请注意,它位于选项列表的末尾?这看起来很奇怪,但实际上很重要。由于允许分隔符为空格字符,因此您将其放在选项列表的末尾。这样,它不是模棱两可的。所以,这里的分隔符是空格()和正斜杠(
/
)。
date /t
的输出如下:
Wed 10/21/2015
[请注意,我使用的是美国英语区域,所以我的日期是M / D / Y格式。]
delims选项在任何分隔符上分割输出。每个生成的“标记”都分配给一个变量,该变量以您在for
命令中指定的变量开头。您在此处指定了%%i
,因此第一个标记为%%i
,然后是%%j
,依此类推。如果你指定了这个:
for /f "tokens=2,3,4 delims=/ " %%a ....
然后代币将以%%a
开头,然后是%%b
等。
tokens=2,3,4
部分告诉for命令将哪些标记分配给变量。这将使for
命令实际分配变量。
因此,对于我们这里的命令,令牌是这样的:
Token | Value | Variable
------|-------|---------
1 | Wed | None
2 | 10 | %%i
3 | 21 | %%j
4 | 2015 | %%k
请注意,分隔符不会出现在输出中!
这使命令的do
部分改变了:
set MyDATE=%%k%%j%%i
对此:
set MyDATE=20152110
现在,我不知道为什么你想要Y / D / M格式的日期,但我假设你的区域使用D / M / Y而你正在转换为Y / M / D.
编辑以添加:
您声明此代码,删除空格:
@echo off
for /f "tokens=2,3,4 delims=/" %%i in ('date /t') do set MyDATE=%%k%%j%%i
echo %MYDATE%
pause
生成此输出:
2015 28
答案是,没有空格,第一个标记变为Wed 28
。但是,您还告诉for
命令tokens=2,3,4
,因此您希望%%i
成为第二个令牌,%%j
成为第三个令牌,%%k
成为第四个令牌。这意味着你的表看起来像这样:
Token | Value | Variable
------|--------|---------
1 | Wed 10 | None
2 | 28 | %%i
3 | 2015 | %%j
4 | | %%k
请注意,%%j
获取值2015
,并在其末尾添加空格。那是因为date /t
的输出方式。无论出于何种原因,它在一年后都有一个尾随空格。运行此命令可以更清楚地看到:
@echo off
for /f "tokens=2,3,4 delims=/" %%i in ('date /t') do (
echo "%%i"
echo "%%j"
echo "%%k"
)
生成此输出(再次,美国英语,因此日期为m / d / y):
"27"
"2015 "
""
另请注意,没有令牌4.当/
是分隔符时,Wed 10/28/2015
中只有两个分隔符,因此令牌4为空值。您仍然可以for
分配它,但它不是特别有用。