Batch file 在一个函数中构造两个IFs,以便只接受批处理文件中两个答案中的一个

Batch file 在一个函数中构造两个IFs,以便只接受批处理文件中两个答案中的一个,batch-file,if-statement,cmd,scripting,windows-scripting,Batch File,If Statement,Cmd,Scripting,Windows Scripting,我正试图编写一个脚本来关闭我的计算机 它要求输入值是以分钟还是以小时为单位,以便将它们转换为关机命令的秒数 这就是我的脚本看起来的样子,但它不起作用 @echo off color 0a :home echo Hours (h) or minutes (m)? set /p unit= if "%unit%"=="h" ( echo For how long do you want to delay it? set /p value= set /a secs="valu

我正试图编写一个脚本来关闭我的计算机

它要求输入值是以分钟还是以小时为单位,以便将它们转换为关机命令的秒数

这就是我的脚本看起来的样子,但它不起作用

@echo off
color 0a
:home
echo Hours (h) or minutes (m)?
set /p unit=

if "%unit%"=="h" (
    echo For how long do you want to delay it?
    set /p value=
    set /a secs="value*=60*60"
    ) if "%unit%"=="m" (
    echo For how long do you want to delay it?
    set /p value=
    set /a secs="value*=60"
    ) else (
    goto:home
    )

rem shutdown /s /f /t %secs%
echo %secs%

echo Closing in 3 seconds.
ping 127.0.0.1 -n 4 > nul
如果有人能让我轻松起来,或者想出一个更好的方法来实现它(我确信这是存在的),那就太好了。

我现在觉得自己很愚蠢

我完全忘记了
否则如果

无论如何,这是完成的工作脚本。此外,输入现在不区分大小写

@echo off
echo ****************************
echo *                          *
echo * QUICK SHUTDOWN SCHEDULER *
echo *                          *
echo ****************************
echo.
echo Hours (H) or minutes (M)?
:home
set /p unit=

if /I "%unit%"=="h" (
    echo For how many hours do you want to delay it?
    set /p value=
    set /a secs="value*=60*60"
) else if /I "%unit%"=="m" (
    echo For how many minutes do you want to delay it?
    set /p value=
    set /a secs="value*=60"
) else (
    echo Please only type H or M.
    goto:home
)

shutdown /s /f /t %secs%

echo Closing in 3 seconds.
ping 127.0.0.1 -n 4 > nul

您可以使用
choice
命令从用户处获取输入,而不是
set/p
;这样,您甚至不需要检查提供的输入,因为它总是正确的。有关详细信息,请键入:
choice/?

您也可以使用数组来显示具有正确单位名称的消息,而无需使用
if
来识别它;有关更多详细信息,请参阅

@echo off
setlocal EnableDelayedExpansion

rem Define the "units" array
set "units[1]=minutes"
set "units[60]=hours"

choice /N /C MH /M "Hours (H) or minutes (M)? "
set /A unit=(%errorlevel%-1)*59 + 1
set /p "value=For how many !units[%unit%]! do you want to delay it? "

set /a "secs=value* unit *60"

shutdown /s /f /t %secs%

echo Closing in 3 seconds.
ping 127.0.0.1 -n 4 > nul