【问题标题】:Y/N Prompt For Reboot in Batch File批处理文件中的 Y/N 提示重启
【发布时间】:2018-09-11 17:45:29
【问题描述】:

我必须为大约 1000 个工作站提供一个批处理文件来编辑一些注册表项并重新启动机器。我已经使用注册表项解决了所有问题,但我想给出一个 Y/N 提示以重新启动。到目前为止,我有:

@echo off
setlocal
:PROMPT
SET /P AREYOUSURE=To continue, the workstation must reboot.  Would you like to reboot now (Y/[N])?
IF /I "%AREYOUSURE%" NEQ "Y" GOTO END

echo ... rest of file ...

:END
endlocal

shutdown.exe /r /t 00

这是我第一次尝试,无论按什么,它似乎都会重新启动。关于我在这里可能做错的任何指示?

【问题讨论】:

  • 如果你不想在用户选择N的情况下不关机,那么你的shutdown需要在:end之前,而不是在它之后。
  • 我会使用 choice.exe /? 来回答是/否问题,并有一个可能超时的默认答案。
  • 这个SET /P AREYOUSURE=To continue, the workstation must reboot. Would you like to reboot now (Y/[N])?应该是SET /P AREYOUSURE=To continue, the workstation must reboot. Would you like to reboot now (Y/[N])?:
  • 使用Choice 它是一个两行:@Choice /M "Would you like to reboot now",@If "%ErrorLevel%"=="1" Shutdown /R /T 0 /D P:0:0。
  • 补充到 Ken White 的建议,当您可以在满足 IF 条件的情况下直接调用 shutdown 时,为什么还要麻烦使用标签和 goto? IF /I "%AREYOUSURE%"=="Y" shutdown.exe /r /t 00。我建议您启用延迟扩展并改用IF /I "!AREYOUSURE!" ...。因为用户可以在提示中输入任何内容并破坏批处理解析器。通过延迟扩展,您可以防止这种情况发生,或者更好的是,按照 LotPings 和 Compo 的建议使用 choice.exe

标签: batch-file cmd prompt reboot


【解决方案1】:

这行得通-

    @ECHO Off
    SET /P yesno=Do you want to Reboot this machine? [Y/N]:
    IF "%yesno%"=="y" GOTO Confirmation
    IF "%yesno%"=="Y" GOTO Confirmation
    IF "%yesno%"=="n" GOTO End
    IF "%yesno%"=="N" GOTO End
    
    :Confirmation
    
    ECHO System is going to Reboot now
    
    shutdown.exe /r 
    
    GOTO EOF
    :End
    
    ECHO System Reboot cancelled
    
    TIMEOUT 5 >nul
    
    :EOF
    exit

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多