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