【发布时间】:2018-12-12 05:17:02
【问题描述】:
我有一部分脚本旨在删除 time /t 和 date /t 命令返回的时间中的“:”和日期中的“/”。如果我在命令提示符 (cmd.exe) 中执行命令,则会返回预期值:
C:\Windows\system32>时间 /t
下午 2:49
C:\Windows\system32>日期 /t
2018 年 7 月 3 日星期二
如果我在批处理脚本的开头放置相同的命令,我会得到预期的结果。但是,如果我在 for 语句中放置相同的命令来解析“:”和“/”。我收到以下消息:
'date /t' 未被识别为内部或外部命令, 可运行的程序或批处理文件。 'time /t' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
在批处理文件之外运行 for 命令可以正常工作。我从头开始重新创建了批处理文件,以确保不存在随机的奇数字符。
这是脚本本身:
time /t
date /t
for /F "Tokens=2,3,4 delims=/ " %%a in ('date /t') Do Set _cdate=%%c%%a%%b
for /F "Tokens=1,2,3 delims=: " %%a in ('time /t') Do Set _ctime=%%a%%b%%c
pause
同样的脚本在另一台服务器和我的桌面上都可以正常工作。我不知道是什么让这个新服务器与众不同。 (除了一个是32位)COMSPEC是正确的。 (C:\Windows\system32\cmd.exe) 这些命令是为日志记录提供文件名前缀的较大脚本的一部分。
【问题讨论】:
-
date /t 和 time /t 命令输出取决于区域设置/用户设置。使用
wmic os get LocalDateTime或powershell -nop -c "get-date -f 'yyyy-MM-dd HH:mm:SS'"以获取所需格式的日期时间字符串。要将输出放入变量中,您需要将其包装在 for /f 命令中。在Stack Overflow中有很多她的例子 -
使用“date /t”和“time /t”命令的脚本在另一个 Windows 2008 服务器上运行良好,因为它是在我上面的测试中编码的。我试图找出是什么导致这个新服务器失败。在多个 Windows 2008 R2 服务器上使用相同的脚本没有问题,只是这台服务器在使用 for 循环中的命令时失败。
-
我的第一个想法是扩展被显式禁用,但会引发完全不同的错误。
-
如果你坚持使用相当陈旧的技术,并且由于事实证明容易出错,你通常无法控制这是你的好权利 - 我建议的方法被很多管理员永久使用原因。
-
@aschipfl,是的,这就是我的观点。我不确定使用
FOR /F时禁用扩展会引发什么错误。/F was unexpected at this time.。我刚刚测试了禁用扩展并在自己的行上运行了DATE /T。它完全搞砸了这个命令。
标签: batch-file windows-console