批处理文件要求无限次输入

אבי*_*רוז 1 batch-file

@echo off

:cancel

    shutdown /a

:shut

    set a=%1

    shutdown -s -f -t %a%

cls

set /p a="the computer will shut in:" %=%

set /a a=%a%*60

if %a%=="a" call :cancel

pasue

call :shut

pause
Run Code Online (Sandbox Code Playgroud)

应该向用户询问一个数字。它将花费该数字并在x分钟内关闭计算机(I乘以60转换为秒),如果答案为“ a”,它将取消关闭计算机的操作。
当我启动程序时,它会问我输入的无穷大时间,根本不会调用shutdown
:)

Ste*_*han 5

我想看一下您的代码,您会将“标签”与“函数声明”混淆了。有一批中没有的功能(至少不会像在其他语言),只是callgoto和“标签”

对于显示的任务,您根本不需要任何标签:

@echo off
set /p a="the computer will shut in:" %=%
if /i "%a%"=="a" shutdown -a & goto :eof
set /a a*=60
shutdown -s -f -t %a%
Run Code Online (Sandbox Code Playgroud)

(注意:您的代码在逻辑上失败:set /a总是返回一个Integer(只要它不会产生语法错误),因此将变量与a 后面的字符串进行比较是没有意义的set /a

推荐阅读:GOTO:EOF返回哪里?

  • @Tiw:是的,它可以像函数或过程一样使用,我们所有人都这样做(很多),有时甚至称它们为函数,但从技术上讲,不是。(我个人最喜欢的术语是“子例程”) (3认同)