我有一台运行 Window Server 2008 R2 Standard 的计算机。它运行 Windows 编写的几个定期任务cmd
。
最近这些批处理作业运行不正常,我意识到脚本的逻辑被破坏了。这是因为在这个服务器上,当你显示%date%
变量时,你在 stdout 中收到的是:
- 实际值-破坏脚本的逻辑:
C:>echo %date%
01/09/2019
- 变量的输出
%date%
应如下所示(我期望的(也是%date%
变量的默认格式)
C:>echo %date%
Wed 01/09/2019
我尝试了几个教程来修改注册表,但都没有成功。由于其他重要应用程序正在运行,因此重新启动服务器受到限制。
请针对此问题提出任何解决方案吗?
答案1
变量%date%
显示当前日期短日期格式定义在地区控制面板(见短日期下拉式菜单):
以下脚本显示了和格式%date%
的外观如何变化:MM/dd/yyyy
M/d/yyyy
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
echo(
set "regKey=HKCU\Control Panel\International"
rem retrieve current sShortDate format
for /F "skip=2 tokens=1,2*" %%G in ('
reg query "%regKey%" -v sShortDate
') do (
set "sShortDateBkp=%%I"
set "sShortDateTyp=%%H" not used, always REG_SZ
)
echo current sShortDate format=%sShortDateBkp% %%date%%=%date%
rem change the sShortDate format to M/d/yyyy
set "sShortDateNew=M/d/yyyy"
>NUL REG ADD "%regKey%" /v sShortDate /t REG_SZ /d "%sShortDateNew%" /f
echo changed sShortDate format=%sShortDateNew% %%date%%=%date%
rem change the sShortDate format back to its original value
>NUL REG ADD "%regKey%" /v sShortDate /t REG_SZ /d "%sShortDateBkp%" /f
echo original sShortDate format=%sShortDateBkp% %%date%%=%date%
输出:
==> D:\bat\SF\948175.bat
current sShortDate format=MM/dd/yyyy %date%=02/07/2019
changed sShortDate format=M/d/yyyy %date%=Thu 02/07/2019
original sShortDate format=MM/dd/yyyy %date%=02/07/2019