Я не могу получить правильные строки if% day% EQU . Я пытаюсь получить переменную autoShutDown в "T", когда сценарий запускается между пятницей 8:30 вечера и субботой в 5:15 вечера. Но иногда кажется, что форматирование отличается и вызывает неправильное назначение переменных.

Какой лучший способ установить переменную? В случае, если это имеет значение, у меня Windows 8.1.

@ECHO OFF
SET day=%date:~0,3%
SET time=%time:~0%
set "time=%time: =%"
set currentDate=%date:~4,10%
set autoShutDown=F

if %day% EQU Fri IF %time% GEQ 20:30:00.00 set autoShutDown=T
if %day% EQU Sat IF %time% LEQ 17:15:00.00 set autoShutDown=T 

if "%autoShutDown%"=="T" (
    GOTO AUTOSHUTDOWN
)

GOTO WEEKDAY

:AUTOSHUTDOWN
%WINDIR%\SYSTEM32\SHUTDOWN.EXE /s /t 180 /c "Shutdown in 180 seconds" /d p:4:1

:WEEKDAY

[РЕДАКТИРОВАТЬ] Итак, исходя из того, что @harrymc написал ниже, это то, что я должен делать?

@ECHO OFF
set autoShutDown=F

for /f %%C in ('wmic path Win32_LocalTime Get dayofweek^,Year^,Month^,Day^,Hour^,Minute^,Second /Format:List 2^>nul ^| find "="') do @set current%%C

REM - Friday 8 PM or later
if %currentDayOfWeek% EQU 5 IF %currentHour% GEQ 20 set autoShutDown=T

REM - ...or Saturday earlier than 6 PM
if %currentDayOfWeek% EQU 6 IF %currentHour% LEQ 17 set autoShutDown=T

if "%autoShutDown%"=="T" (
    GOTO AUTOSHUTDOWN
)

GOTO WEEKDAY

:AUTOSHUTDOWN
%WINDIR%\SYSTEM32\SHUTDOWN.EXE /s /t 180 /c "Shutdown in 180 seconds" /d p:4:1

:WEEKDAY

1 ответ1

1

%DATE% не является надежным, поскольку его формат настраивается и может изменяться для каждого пользователя.

Этот код, предназначенный для запуска внутри файла .bat , извлечет все параметры даты и времени с помощью команды wmic:

@echo off

for /f %%C in ('wmic path Win32_LocalTime Get dayofweek^,Year^,Month^,Day^,Hour^,Minute^,Second /Format:List 2^>nul ^| find "="') do @set current%%C

:display the variables
set current

Вот что он сделал в воскресенье:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .