首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在批处理文件中使用日期命令时,错误级别不起作用

在批处理文件中使用日期命令时,错误级别不起作用
EN

Stack Overflow用户
提问于 2019-05-22 21:46:47
回答 2查看 207关注 0票数 0

我编写了这段代码来更改日期。但是当我输入了错误的日期时,errorlevel命令似乎被忽略了。

代码语言:javascript
复制
@echo off
@setlocal enableextensions
@cd /d "%~dp0"
mode 48,12

:start
cls
echo.
echo 1 - Mudar data
echo 2 - Retornar a data atual
echo.
echo.
echo.
echo.
choice /n /c:12 /m "Digite uma op‡Æo:"%1
if errorlevel ==2 goto 2
if errorlevel ==1 goto 1

:1
cls
set /p "dd=Digite o dia: "
cls
set /p "mm=Digite o mes: %dd% - "
cls
set /p "aa=Digite o ano: %dd% - %mm% - "
cls
date %dd%-%mm%-%aa%
if not errorlevel 1 (
cls
echo Data modificada.
pause
goto start
)

if errorlevel 1 (
cls
echo Erro ao mudar a data.
pause
goto start
)

:2
cls
w32tm /resync >nul 2>nul
cls
goto start

我假设如果日期输入错误,它将显示一个echo Erro ao mudar a data.,但它只会打开date命令屏幕,要求更改日期,因为输入错误。

编辑1个

只需更新我的代码,包括停止Windows Time Service的命令,因为即使我更改了日期,在一段时间后,实际日期再次被替换。

代码语言:javascript
复制
@echo off
setlocal enableextensions
cd /d "%~dp0"
mode 42,12

:begin
cls
echo ------------------------------------------
echo          MUDAR A DATA DO WINDOWS
echo ------------------------------------------
echo( &echo(
echo  1 - Escolher a data & echo( &echo  2 - Retornar para a data atual
echo( & echo( &echo(
choice /n /c:12 /m "Digite uma op‡Æo:"%1
goto :lab%errorlevel%

:lab1
cls & set /p "dd=Digite o dia: "
cls & set /p "mm=Digite o mes: %dd% / "
cls & set /p "aa=Digite o ano: %dd% / %mm% / "

date %dd%/%mm%/%aa% <nul && (

    cls
    net stop w32time >nul 2>nul
    sc config w32time start= disabled >nul 2>nul
    echo Data modificada.
    timeout /nobreak /t 2 >nul 2>nul
    goto begin
) || (
      cls & echo Erro ao mudar a data.
      echo( &echo( &echo(
      pause
      goto begin
)

:lab2
net start w32time >nul 2>nul
sc config w32time start= demand >nul
cls & w32tm /resync >nul 2>&1
echo Data atual retornada.
timeout /nobreak /t 2 >nul 2>nul
cls & goto begin
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-23 01:39:43

如果将date命令的输入重定向到nul,您仍然会收到错误消息并提示输入有效日期,但是该命令会立即失败,并返回相应的错误返回代码。

我发现使用&&||来处理成功和失败要比使用IF容易得多。

代码语言:javascript
复制
date %dd%-%mm%-%aa% <nul && (
  cls
  echo Data modificada.
) || (
  cls
  echo Erro ao mudar a data.
)
pause
goto start
票数 3
EN

Stack Overflow用户

发布于 2019-05-22 22:16:46

将您的标签:1:2重命名为:lab1:lab 2,然后删除以下行:

代码语言:javascript
复制
if errorlevel ==2 goto 2
if errorlevel ==1 goto 1

并将它们替换为下面这一行:

代码语言:javascript
复制
goto :lab%errorlevel%

然后,您应该只拥有:

代码语言:javascript
复制
choice /n /c:12 /m "Digite uma op‡Æo:"%1
goto :lab%errorlevel%

然后是其他观察结果,删除echo.行并将其替换为echo( cls行本身看起来很丑陋,所以我喜欢通过将它们与&和其他命令一起运行来集成它们,以使其看起来更好,因此完全清理将是:

代码语言:javascript
复制
@echo off
setlocal enableextensions
cd /d "%~dp0"
mode 48,12

:begin
cls
echo( & echo 1 - Mudar data & echo 2 - Retornar a data atual
echo( & echo( &echo( &echo(
choice /n /c:12 /m "Digite uma op‡Æo:"%1
goto :lab%errorlevel%

:lab1
cls & set /p "dd=Digite o dia: "
cls & set /p "mm=Digite o mes: %dd% - "
cls & set /p "aa=Digite o ano: %dd% - %mm% - "
cls & echo %dd%-%mm%-%aa% | date
if not errorlevel 1 (
    cls
    echo Data modificada.
    pause
    goto begin
  ) else (
      cls & echo Erro ao mudar a data.
      pause
      goto start
)

:lab2
cls & w32tm /resync >nul 2>&1
cls & goto begin
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56258350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档