无忧启动论坛

标题: 无意中发现DOS批处理命令中2个怪现象 [打印本页]

作者: quya    时间: 2020-5-19 14:56
标题: 无意中发现DOS批处理命令中2个怪现象
昨天我在编一个小小批处理的时候, 发现2个怪现象, 不知道是不是我少见多怪,我自己觉得有点有趣, 所以和大家分享下。

1.  批处理命令以普通用户和以system账户运行结果不一样。 例 echo %date:~,7%
2.  md 2020/05 出错, md “2020/05” 却能成功, 当然一般的写法应该是 md 2020\05, 这个无论加不加引号我想都是一样并且会成功。

先说这些, 后续再补怎么发现的。
作者: plusv    时间: 2020-5-19 15:17
2. 这很正常, / 通常是当参数分格号.

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]sortorder]]  [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

作者: wxgwxg    时间: 2020-5-19 20:32
dos一般使用\表示路径,例如:"c:\",使用/添加参数,例如:“format c:\ /s”。
作者: nttwqz    时间: 2020-5-19 21:23
本帖最后由 nttwqz 于 2020-5-19 21:46 编辑

变量%DATE%的值取决于系统区域设置中短日期格式的设置。

默认设置是:
2020/05/19 周二

改变设置后可能是:
2020-05-19 周二
2020.05.19 周二
20/05/19 周二
20.05.19 周二
2020-05-19
2020/05/19
2020.05.19
……

因为一般人都不会改变设置,所以绝大多数情况下下面的写法也成立。
  1. echo %date:~0,4%%date:~5,2%%date:~8,2%
  2. ::结果20200519
复制代码


如果从列表中选择其它设置,下面的情况适用:
  1. for /f "tokens=1,2,3 delims=-/. " %a in ("%date%") do echo %a %b %c
  2. ::可能的结果2020 05 19
复制代码


如果使用自定义格式手动指定,那么应该需要读取注册表,这个没有研究过,有兴趣可以自己研究。

比如自定义后的值可能是:周二 2020 19/05
作者: quya    时间: 2020-5-20 10:18
nttwqz 发表于 2020-5-19 21:23
变量%DATE%的值取决于系统区域设置中短日期格式的设置。

默认设置是:

谢谢,这些我都知道, 我的电脑设置的是 yyyy-mm-dd, 但是当以system权限运行的时候,不管你设置的是什么格式, 都会以yyyy/mm/dd 呈现结果, 这就是我说的其中的一个怪现象。

中文版是这样子, 未试过英文版的。
作者: 2010techon    时间: 2020-6-24 10:58
Windows批处理的坑的确很多,这点还真不算什么。。。
作者: hexj68    时间: 2020-6-24 22:46
感谢分享




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3