我已经编写了此代码来更改日期。但是当我输入错误的日期时,errorlevel
命令似乎被忽略了。
@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
的命令),因为即使我更改了日期,有时过后,真实日期也会被替换。
@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
答案 0 :(得分:3)
如果将DATE命令的输入重定向到nul,您仍然会收到错误消息并提示输入有效日期,但是该命令立即失败,并显示相应的错误返回码。
我发现使用&&
和||
来处理成功和失败要比使用IF容易得多。
date %dd%-%mm%-%aa% <nul && (
cls
echo Data modificada.
) || (
cls
echo Erro ao mudar a data.
)
pause
goto start
答案 1 :(得分:2)
用:1
和:2
2重命名标签:lab1
和:lab
,然后删除这些行:
if errorlevel ==2 goto 2
if errorlevel ==1 goto 1
并将其替换为此行:
goto :lab%errorlevel%
您应该只拥有:
choice /n /c:12 /m "Digite uma op‡Æo:"%1
goto :lab%errorlevel%
然后其他观察结果,删除echo.
行,并用echo(
替换它们
cls
行看起来很丑陋,所以我喜欢通过将&
与其他命令一起运行来使其集成,使其看起来更好
因此,总清理将是:
@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