由任务计划程序运行时与命令行程序的结果不同

由任务计划程序运行时与命令行程序的结果不同

我从另一个命令行程序中调用以下程序......

:: NT_getdate.cmd    return yumd-date in var='ymd'
@echo on
setlocal
for /F "tokens=2,3,4 delims=/ " %%g in ('echo.^|date /t') do (
    set dd=%%g
    set mm=%%h
    set yy=%%i
)
endlocal& set ymd=%yy%%mm%%dd%

当我从命令行运行程序时,ymd 返回为“20160501”,这正是我想要的。

当我从任务计划程序运行顶级程序时,得到的结果是“1605”

有任何想法吗?

答案1

我希望日期格式为 20160501

当我从命令行运行程序时,ymd 返回为“20160501”,这正是我想要的。

当我从任务计划程序运行顶级程序时,得到的结果是“1605”

提供%date%解决方案取决于操作系统区域设置、地区和语言设置。这解释了为什么您会得到不同的输出。

wmic另一方面,使用与操作系统区域设置、语言或用户选择的日期格式(控制面板/区域)无关。

以下批处理文件用于wmic以 OP 指定的格式检索日期和(本地)时间,因此不会遭受使用 的解决方案的缺点%date%

获取日期.cmd:

@echo off
setlocal
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1-3" %%g in (`wmic Path Win32_LocalTime Get Day^,Month^,Year ^| findstr /r /v "^$"`) do (
  set _day=00%%g
  set _month=00%%h
  set _year=%%i
  )
  rem pad with leading zeros
  set _month=%_month:~-2%
  set _day=%_day:~-2%
  set _date=%_year%%_month%%_day%
  echo %_date%
endlocal

笔记:

输出

F:\test>date /t
01/05/2016

F:\test>GetDate
20160501

F:\test>

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • 获取日期- 显示独立于操作系统区域设置、语言或用户选择的日期格式(控制面板/区域)的日期和时间。
  • 变量- 提取变量的一部分(子字符串)。
  • 西米克- Windows 管理规范命令。

相关内容