【问题标题】:Need a Shutdown script: Check date if Wednesday run batch script需要关机脚本:如果星期三运行批处理脚本,请检查日期
【发布时间】:2012-03-06 13:14:41
【问题描述】:

我们使用 avast adnm 4.8,它没有关机扫描选项。 我已经制作了一个批处理脚本来在关闭时运行 Avast。

@echo off
shutwdown -a
pushd "C:\Program Files\Alwil Software\Avast4"

cls

echo --------------------------------------------------------------

echo Bezig met scannen, de computer wordt automatisch uitgezet...

echo --------------------------------------------------------------

aswcmd C: /m /*

popd "C:\Program Files\Alwil Software\Avast4"

shutdown -s

但我只想在星期三扫描计算机。因此,如果不是星期三,计算机必须在不扫描的情况下关闭。

我需要一个 VBscript 来检查当前日期并在星期三调用批处理脚本,然后在其他日子继续关闭。我想将此脚本用作关机脚本。如果可以使用批处理脚本也可以。

提前致谢,

【问题讨论】:

    标签: windows vbscript batch-file shutdown


    【解决方案1】:

    您可以使用此批处理脚本来执行此操作:

    @ECHO OFF
    FOR /F "TOKENS=1-3 DELIMS=/" %%A IN ("%DATE%") DO SET /A MM=10%%A %% 100, DD=10%%B %% 100, YY=%%C
    IF %MM% LSS 3 SET /A MM+=12, YY-=1
    SET /A A=YY/100, B=A/4, C=2-A+B, E=36525*YY/100, F=306*(MM+1)/10, DOW=(C+DD+E+F-3)%%7
    IF NOT %DOW% == 3 GOTO SHUTDOWN
    ECHO TODAY IS WEDNESDAY, SCAN HERE...
    :SHUTDOWN
    ECHO SHUTDOWN HERE...
    

    DOW 变量的值介于 0(星期日)和 6(星期六)之间。如果您的日期格式不是 MM/DD/YYYY,请相应更改 FOR/SET 命令中的 MM、DD 和 YY 变量顺序。

    【讨论】:

    • @e2e2:打扰一下?它在我的机器上运行良好!请在SET /A 命令之前插入ECHO MM=%MM%, DD=%DD%, YY=%YY% 并报告结果。是/ 字符。你的日期分隔符? (只需输入ECHO %DATE%)。如果没有,请在DELIMS=/ 中更改。
    • @e2e2:哎呀!在IF %MM% LSS 3 ... 之前插入ECHO MM=%MM%, DD=%DD%, YY=%YY% 并报告结果,请... :)
    【解决方案2】:

    这应该可以解决问题

    If WeekdayName(Weekday(Date))="Wednesday" Then
     Dim shell
     Set shell=createobject("wscript.shell")
     shell.run "C:\Documents and Settings\Amol\Desktop\Temp\Shutdown.bat"
     set shell=Nothing
    End If  
    

    【讨论】:

    • 嗨 4M01,它不工作。我试过荷兰语和英语的窗户,但没有运气。对于荷兰语,我将其更改为“wo”和“woensdag”。
    • 你有什么错误,你改变了什么?您只需要更改 bat 文件的路径,而不是“C:\Documents and Settings\Amol\Desktop\Temp\Shutdown.bat”
    • 我只更改了批处理脚本的路径。我没有收到任何错误。它不运行批处理脚本。我用过这个: If WeekdayName(Weekday(Date))="Wednesday" Then Dim shell Set shell=createobject("wscript.shell") shell.run "C:\Documents and Settings\test\Desktop\Temp\aVastShutdownScan. bat" set shell=Nothing End If
    • """C:\Documents and Settings\test\Desktop\Temp\aVastShutdownScan.bat""" 试试这个,而不是 "C:\Documents and Settings\test\Desktop\Temp\aVastShutdownScan。蝙蝠”
    • 好的,我搞定了。周三更改为 woensdag (荷兰语),它奏效了。但我们也有英文 Windows,所以我改变了你的脚本。我将在下面发布它作为答案。非常感谢你的帮助伙伴。你是英雄!
    【解决方案3】:

    与 Weekday() 进行比较总是更好,并且仅将 WeekdayName() 用于显示目的。

    幸运的是,有一个全局系统枚举已经将 Weekday() 的所有数值映射到在您的 Windows 安装的本地语言中可读的星期几名称常量。我想你的安装提供了一个 vbWoensdag 常量。否则我们会让未来的程序员去这里的 4 有什么用?

    Weekday() will return one of the following constant values:
    
    vbSunday    1
    vbMonday    2
    vbTuesday   3
    vbWednesday 4
    vbThursday  5
    vbFriday    6
    vbSaturday  7
    

    编写测试的正确方法是

    If Weekday(date) = vbWednesday Then ....
    

    您也可以随时使用现在代替日期。不同之处在于 Now 包括当前时间,其中 Date 始终将 datetime 值的该部分归零。如果您将日期时间变量数字视为双精度数,则整数部分是日期,时间是余数。所以 Date 基本上是 Int(Now) ,即那一天开始的午夜。你也可以说 Tomorrow = Date + 1 如果你发现调用 DateAdd() 来获得一个简单的增量过多。

    【讨论】:

      【解决方案4】:

      感谢4M01

      1) 此脚本仅适用于荷兰语 Windows:(将“woensdag”更改为您自己的语言,例如,如果您使用英文 Windows,则将其更改为星期三。区分大小写)

      If WeekdayName(Weekday(date)) = "woensdag" Then
       Dim shell
       Set shell=createobject("wscript.shell")
       shell.run """C:\Documents and Settings\test\Desktop\scan.bat"""
       set shell=Nothing
      End If
      

      2) 此脚本适用于多语言 Windows。 (你必须找到星期几。在这种情况下,星期三是第 4 号)

      If Weekday(date) = "4" Then
       Dim shell
       Set shell=createobject("wscript.shell")
       shell.run """C:\Documents and Settings\test\Desktop\scan.bat"""
       set shell=Nothing
      End If
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-15
        • 2013-07-30
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多