Windows 根据星期几工作的批处理脚本停止工作
所以昨天我复制/粘贴了一半写的这个批处理文件,以根据一周中的哪一天自动完成一些任务。它工作得很好,但今天它停止了。它只是说“Echo已打开”,而不是在控制台上写入一天中的一周[1,7]整数,它昨天做得很好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 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
输出不依赖于区域设置(使编写独立于区域设置的代码变得容易),这很好理解。谢谢。你能把这个作为答案贴出来,这样我就可以把它标出来了吗?