Использование% date% в пакетном скрипте - PullRequest
0 голосов
/ 05 июня 2018

Я хочу иметь такой код:

if %date% equ "Mon" echo do this do that

, но окно cmd закрывается после обнаружения этого кода, даже если после него поставить

pause

.Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вот полный файл cmd, который даст вам то, что вам нужно.Важным битом является функция getDow, и, надеюсь, она достаточно хорошо прокомментирована для понимания.Во-первых, тестовая система:

@echo off
rem Test harness bit - just get current date and compare with getDow.

date /t
call :getDow num long short
echo Day of week is %num%, %long%, %short%
goto :eof

Сама функция:

rem Usage: call :getDow <num> <long> <short>
rem        <num> will receive the numeric form (0-6).
rem        <long> will receive the long form (e.g., Monday).
rem        <short> will receive the short form (e.g., Mon).

:getDow
    rem Create local scope to prevent information leakage.

    setlocal enableextensions enabledelayedexpansion

    rem Create array for translation.

    set idx=0
    for %%a in (Sunday Monday Tuesday Wednesday Thursday Friday Saturday) do (
        set dow[!idx!]=%%a
        set /a "idx += 1"
    )

    rem Get the numeric day of week, mmi command will
    rem output 'DayOfWeek=N' and we just extract N.

    for /f "tokens=2 delims==" %%a in ('WMIC Path Win32_LocalTime Get DayOfWeek /value ^| findstr "DayOfWeek="') do (
        set localNum=%%a
    )
    set localStr=!dow[%localNum%]!

    rem Properly end scope but let selected information leak.

    endlocal&&set %1=%localNum%&&set %2=%localStr%&&set %3=%localStr:~0,3%
    goto :eof

Пример выполнения этого сценария дает:

Tue Jun 05
Day of week is 2, Tuesday, Tue
0 голосов
/ 05 июня 2018

Возможно, вы захотите использовать:

IF /I "%DATE:~,3%"=="Mon" (Echo Do this
    Echo Do that)

Или, возможно:

IF NOT "%DATE:Mon=%"=="%DATE%" (Echo Do this
    Echo Do that)

Однако ни один из этих методов не является безопасным или надежным в чем-либо, кроме вашей конкретной пользовательской среды.

Таким образом, я могу получить день недели в переменной, используя пакетный файл с WMIC:

For /F %%A In ('WMIC Path Win32_LocalTime Get DayOfWeek') Do For %%B In (
    Monday.1 Tuesday.2 Wednesday.3 Thursday.4 Friday.5 Saturday.6 Sunday.0
) Do If "%%~xB"==".%%A" Set "WDName=%%~nB"

Строка 2 может быть дополнительно настроена наначните с Sunday.0 Monday.1 и т. д., если необходимо, или Lunes.1 Martes.2 и т. д., в зависимости от вашего языка.

Затем вы можете использовать:

If "%WDName%"=="Monday" (Echo Do this
    Echo Do that)

Хотя (Get-Date).DayOfWeekв PowerShell кажется намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...