【问题标题】:Run parts of a batch file based on the day of the week根据星期几运行批处理文件的一部分
【发布时间】:2012-11-27 19:26:39
【问题描述】:

我正在 SQL Server 代理作业中运行一个 dos 批处理文件。我在批处理文件中有 34 个步骤。除了第 31 步之外,所有步骤每天都运行。它只在星期二运行。我可以设置另一个 SQL 代理作业,但这似乎有点矫枉过正。如何在批处理文件中查询系统的星期几,以便仅在星期二运行第 31 步?我尝试了下面的代码,但没有运气。

For /F "tokens=1 delims= " %%A in ('Date /t') do @( 
Set DayName=%%A 
) 

if('%DayName:~0,3%' equ 'Tue') <run step 31>

当我回显“%DayName:~0,3%”时,它显示“Tue”

【问题讨论】:

  • 结果如何?您可能可以通过使用%DATE:~0,3% 而不是 FOR 循环来简化脚本。
  • @hall.stephenk....好主意。我喜欢。

标签: file parsing batch-file dayofweek


【解决方案1】:

你可以用这个:

wmic path win32_localtime get dayofweek

返回“2”是星期二。

【讨论】:

【解决方案2】:

感谢您的反馈。我发现了这个问题。它是 if 语句中的括号。一旦我删除它们,它就可以正常工作。我还删除了单引号。

这行得通

if %DayName:~0,3% equ Tue

这也有效:

if '%DATE:~0,3%' equ 'Tue'

这些都不行

if %DATE:~0,3% equ 'Tue'
if (%DATE:~0,3% equ Tue)

【讨论】:

  • 实际上是引号引起了问题。 if %DATE:0,3% equ "Tue" echo True 不输出任何内容,而 if %DATE:0,3% equ Tue echo True 输出 True
  • 为什么我得到的是“201”而不是“Tue”?
  • @Ken....很酷的交易。感谢您的澄清。实际上两者兼而有之。 if (%DATE:~0,3% equ Tue) echo True 不输出任何内容
  • @Francis...不确定。 2 会是星期二的部分吗?也许您的系统时钟设置不同?
  • @Francis:我猜你在%DATE% 以第一年(2012 年)开始的语言环境。因此,您的日期变量的前 3 个字符是“201”而不是“Tue”。这个问题就是为什么您的解决方案比这个更强大的原因。
猜你喜欢
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 2019-04-06
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多