在批处理文件中查找星期几?(Windows Server 2008)

Dan*_*ola 8 windows-server-2008 ms-dos batch date

我有一个从批处理文件运行的进程,我只想在一周中的某一天运行它。
是否有可能获得星期几?

我发现的所有示例都以某种方式依赖“date /t”返回“Friday, 12/11/2009”,但是,在我的机器中,“date /t”返回“12/11/2009”。那里没有工作日。

我已经检查了我机器的“区域设置”,长日期格式确实包括工作日。短日期格式没有,但我真的不想改变它,因为它会影响我做的很多事情。

Rob*_*obW 11

我参加这个聚会有点晚了,但这会给你一周中的一天:

wmic 路径 win32_localtime 获取星期几

使用批处理 for 循环来获取输出,并且您有一周中某天的可测试条件。


Joh*_*ers 6

这是一个批处理文件,可以将所有日期和时间信息放入变量中,但这取决于您在机器上设置了适当的日期格式。此外,订单可能需要根据当地日期格式进行调整,我不确定。

@echo off
for /F "tokens=1-4 delims=/ " %%i in ('date /t') do (
set WD=%%i
set D=%%j
set M=%%k
set Y=%%l
) 

for /F "tokens=1-4 delims=: " %%i in ('time /t') do (
set H=%%i
set Mn=%%j
set AP=%%k
)

if "%AP%"=="PM" set /A H=%H%+12

echo %WD% %D%/%M%/%Y% - %H%:%Mn%
Run Code Online (Sandbox Code Playgroud)

您想要的位在 %WD% 中。


Dan*_*ett 6

以下是现代系统上 BAT 脚本的正确答案:

@echo off
for /f %%i in ('powershell ^(get-date^).DayOfWeek') do set dow=%%i
echo %dow%
Run Code Online (Sandbox Code Playgroud)

输出:

Saturday
Run Code Online (Sandbox Code Playgroud)

用法:

@echo off
for /f %%i in ('powershell ^(get-date^).DayOfWeek') do set dow=%%i
if %dow% == Saturday goto shutdown
if %dow% == Sunday goto shutdown
exit

:shutdown
shutdown /s /f /t 90
Run Code Online (Sandbox Code Playgroud)

我将此用于每天从 BIOS 自动启动的 PC,这些 PC 没有排除周末的选项。

旁白:ACPI 是一种更可靠的方法,并允许使用虚拟 BAT 脚本,例如exit在选择特定日期的 Windows 计划任务中使用,使用唤醒计算机以运行此任务选项。


Dan*_*ola -2

好的,找到了答案...
我找不到使用纯 BAT 文件的方法,但如果您有权访问 powershell...

@echo off
powershell date > date.txt
find/i "Fri" date.txt  > nul
if errorlevel 1 goto SkipWeeklyTasks

Do your weekly stuff here

:SkipWeeklyTasks
del date.txt
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你...

编辑:(对于可能遇到这个问题的人)这是令人讨厌和丑陋的,不应该这样做,并且这个问题的其他答案如果适用于您的话会更好。如果您需要在已有的批处理文件中快速完成此操作,那么这可能适合您。

丹尼尔

  • 如果您打算使用 powershell,您不妨将整个脚本翻译为 powershell。 (3认同)
  • 呃。请。如果您必须为此使用 PowerShell,那么至少返回一个结果,该结果 (a) 独立于任何区域设置 [星期几不需要存在,并且不必是英语] 并且 (b) 是易于解析。因此 `powershell "&{[int](Get-Date).DayOfWeek}"` 可能是更好的答案,您可以轻松地将其放入环境变量中并进行比较。 (2认同)