Windows 根据星期几工作的批处理脚本停止工作

Windows 根据星期几工作的批处理脚本停止工作,windows,batch-file,Windows,Batch File,所以昨天我复制/粘贴了一半写的这个批处理文件,以根据一周中的哪一天自动完成一些任务。它工作得很好,但今天它停止了。它只是说“Echo已打开”,而不是在控制台上写入一天中的一周[1,7]整数,它昨天做得很好 @echo off & Setlocal Set "_=mon tues wed thurs fri sat sun" For /f %%# In ('WMIC Path Win32_LocalTime Get DayOfWeek^|Findstr [1-7]') Do (

所以昨天我复制/粘贴了一半写的这个批处理文件,以根据一周中的哪一天自动完成一些任务。它工作得很好,但今天它停止了。它只是说“Echo已打开”,而不是在控制台上写入一天中的一周[1,7]整数,它昨天做得很好

@echo off & Setlocal 
Set "_=mon tues wed thurs fri sat sun" 
For /f %%# In ('WMIC Path Win32_LocalTime Get DayOfWeek^|Findstr [1-7]') Do ( 
    Set DOW=%%#)
:: Line below is supposed to write day of the week as [1,7] integer at the console. It did that and the rest worked fine yesterday, but not today.
echo %DOW%
pause
@echo off
IF %DOW%==1 (goto monday)
IF %DOW%==2 (goto tuesday)
IF %DOW%==3 (goto wednesday)
IF %DOW%==4 (goto thursday)
IF %DOW%==5 (goto friday)
IF %DOW%==6 (goto saturday)
IF %DOW%==7 (goto sunday)
goto finish
:monday
    :: do something
    goto finish
:tuesday
    :: do something
    goto finish
:wednesday
    :: do something
    goto finish
:thursday
    :: do something
    goto finish
:saturday
    :: do something
    goto finish
:sunday
    :: do something
    goto finish
:finish
    echo finished running

如何解决此问题?

您会发现周日是
0
,而不是
7

wmic
输出不依赖于区域设置。这使得编写独立于语言环境设置的代码变得容易。DayOfWeek使用[0…6](其中0=星期日)

Findstr[1-7]
更改为
Findstr[0-6]


如果%DOW%==7(转到星期日)到
如果%DOW%==0(转到星期日)
您的代码似乎有效,因为只有星期日与美国/欧盟的编号不同:

Weekday Sun Mon Tue Wed Thu Fri Sat Sun
USdow    0   1   2   3   4   5   6  
EUdow        1   2   3   4   5   6   7

Set /A USdow = EUdow %% 7
我建议使用powershell直接获取工作日名称。 您不必将数字转换为带有多个IFs的标签,但可以 使用日期名称本身:

:: Q:\Test\2017\08\27\SO_45905800.cmd
@echo off & Setlocal EnableDelayedExpansion

For /f %%# in ('powershell -NoP -c "(get-date).DayOfWeek"') Do Set "DoW=%%#"
echo:Day of week is: %DoW%

Call :%DoW% passed %DoW%

:finish

goto :Eof

:monday
    :: do something
    echo sub %0 Arguments %*
    goto :Eof
:tuesday
    :: do something
    echo sub %0 Arguments %*
    goto :Eof
:wednesday
    :: do something
    echo sub %0 Arguments %*
    goto :Eof
:thursday
    :: do something
    echo sub %0 Arguments %*
    goto :Eof
:friday
    :: do something
    echo sub %0 Arguments %*
    goto :Eof
:saturday
    :: do something
    echo sub %0 Arguments %*
    goto :Eof
:sunday
    :: do something
    echo sub %0 Arguments %*
    goto :Eof
今天的样本输出:

> Q:\Test\2017\08\27\SO_45905800.cmd
Day of week is: Sunday
sub :Sunday Arguments pass Sunday

它不是[1..7],而是[0..6](其中0=星期日)。更改
findstr
是否对SundayIt有效,但如何操作?我使用的是非美国语言环境,它使用星期一作为一周的开始。这不随计算机区域设置而改变吗?
wmic
输出不依赖于区域设置(使编写独立于区域设置的代码变得容易),这很好理解。谢谢。你能把这个作为答案贴出来,这样我就可以把它标出来了吗?