3

我已经多次尝试让这批工作,但它不会,它让我发疯。在我屈服于提出问题之前,我还梳理了这个网站并尝试了许多不同的东西。

我有一批将根据您选择的选项进行关机、重新启动或注销。当我运行它并希望通过检查答案以查看它是否为零来从几小时到几分钟到几秒时,问题就出现了。它给出了错误“有一个意外的(”并立即关闭。如果我把它拆开并单独运行它,它就可以工作。

这是包含 If 语句的主要函数。如果你想看整批我可以给你。我已经注释掉了 shutdown 的实际使用,只是为了帮助弄清楚这一点。解决此问题后,将删除 REM'd out 关闭行之前的 2 行。

:SR_MAIN
cls
echo+
echo+  
set /p SR_hrs=....Please enter the number of hours before %SR_NAME%:  

IF "%SR_hrs%" == 0 (
     echo+
     echo    You don't want hours, huh?
     timeout /t 2 > nul
     cls
     echo+
     echo+
     set /p ptm=....Please enter the number of minutes before %SR_NAME%:  
     IF %ptm% == 0 (
          echo+
          echo    You don't want minutes, huh?
          timeout /t 2 > nul
          cls
          echo+
          echo+
          set /p pts=....Please enter the number of seconds before %SR_NAME%:  
          IF %pts% == 0 (
               echo+
               echo    Exiting to Shutdown menu...
               timeout /t 2 > nul
               goto SHUTREMENU
          ) ELSE (
               cls
               echo+
               echo+
               echo    This will %SR_NAME% the computer in the seconds you provided.
               set /a tm=pts
               echo+
               echo    Waiting %tm% seconds before continuing...
               echo+
               timeout /t %tm%
                  echo Now would come the %SR_NAME%!
                  pause
REM               shutdown /f /%SR_N% /t 0
               exit
          )
     ) ELSE (
          cls
          echo+
          echo+
          echo    This will %SR_NAME% the computer in the minutes you provided.
          set /a tm=ptm*60
          echo+
          echo    Waiting %ptm% minutes (%tm% seconds) before continuing...
          echo+
          timeout /t %tm%
             echo Now would come the %SR_NAME%!
             pause
REM          shutdown /f /%SR_N% /t 0
          exit
     )
) ELSE (
     cls
     echo+
     echo+
     echo    This will %SR_NAME% the computer in the hours you provided.
     set /a tm=SR_hrs*60*60
     echo+
     echo    Waiting %SR_hrs% hours (%tm% seconds) before continuing...
     echo+
     timeout /t %tm%
        echo Now would come the %SR_NAME%!
        pause
REM     shutdown /f /%SR_N% /t 0
     exit
)

:MAIN_MENU
ECHO Exiting to Main Menu...
PAUSE

谢谢你提供的所有帮助。这对我来说是一个真正的难题。

Ĵ

4

2 回答 2

1

少了一个百分号。

IF "%SR_hrs%" == 0 (

           ↑ there
于 2012-10-02T23:18:35.110 回答
1

塞巴斯蒂安指出了失踪的地方%

您的另一个问题是变量的扩展在设置变量的同一代码块中不起作用。在执行任何操作之前解析整个代码块,并且%ptm%在解析时扩展类似代码。因此,您将获得ptm设置之前的值!

解决方案是使用延迟扩展。

放在setlocal enableDelayedExpansion脚本顶部附近。

然后在你的代码块中使用!var!而不是。%var%

有关延迟扩展的更多信息,help set请从命令行键入,然后从“最后,支持延迟的环境变量扩展...”处读取。

于 2012-10-03T00:35:05.027 回答