我有一部分脚本旨在删除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)这些命令是较大的脚本的一部分,该脚本提供用于记录的文件名前缀。
答案 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
::********************************************************************************************