【发布时间】: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