在for循环中使用内置命令时失败

时间:2018-07-03 20:13:45

标签: batch-file windows-console

我有一部分脚本旨在删除time / t和date / t命令返回的时间中的“:”和日期中的“ /”。如果我在命令提示符(cmd.exe)中执行命令,则返回预期值:

  

C:\ Windows \ system32>时间/ t
  下午02: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)这些命令是较大的脚本的一部分,该脚本提供用于记录的文件名前缀。

1 个答案:

答案 0 :(得分:2)

您可以使用 WMIC 尝试使用此批处理脚本,以获取不依赖于区域设置/用户设置的日期和时间:

@echo off
Title Get Date and Time using WMIC
Call :Get_Date_Time 
echo Date : %Year%-%Month%-%day%
echo Time : %Hour%:%Min%:%Sec%
Pause>nul & Exit
::********************************************************************************************
:Get_Date_Time
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set "MyDate=%%x"
set "Year=%MyDate:~0,4%"
set "Month=%MyDate:~4,2%"
set "Day=%MyDate:~6,2%"
set "Hour=%MyDate:~8,2%"
set "Min=%MyDate:~10,2%"
set "Sec=%MyDate:~12,2%
exit /b
::********************************************************************************************