Если% 1 не является целым числом, то set /a seconds_test=seconds_test +1
установит значение секундной_тесты (или задержки_секунд) равным 1
, поскольку остальная часть оператора set отбрасывается из-за переключателя /a
.
@echo off & @setlocal enableextensions enabledelayedexpansion
set seconds_test=%1
set /a seconds_test=seconds_test +1
set seconds_test
batch_file.bat a
возвращает:
seconds_test=1
Таким образом, команда ping пингуется один раз без ошибок. Вот как я бы проверил ввод:
@echo off & @setlocal enableextensions enabledelayedexpansion
:: check that something was entered
if "%~1"=="" (
echo.
echo You didn't enter any seconds
echo Nothing to do, press any key to exit
echo.
pause >nul
goto :eof
)
:: check for non-numbers in the input
echo %1|findstr /i /r "[^0-9]" >nul&&echo.&&echo %1 is not a valid number of seconds.&&echo.&&echo Press any key to exit . . .&&pause>nul&&goto :eof
set seconds_test=%1
:: check for leading zero
if "%seconds_test:~0,1%"=="0" (
rem but zero by itself is ok
if not "%seconds_test%"=="0" (
echo.
echo You entered %1.
echo Please don't use leading zeros.
echo.
echo Press any key to exit
echo.
pause >nul
goto :eof
)
)
:: if we make it here, then the input should be an actual number.
set /a delay_seconds=seconds_test + 1
ping localhost -n !delay_seconds! >nul
Есть много вещей, на которые стоит обратить внимание. Я использую goto: eof, где вам может понадобиться выход. Я делаю паузу для отображения ошибок, где вам может понадобиться выполнение, чтобы просто продолжить. Я не знаю, что это особенно элегантно, или если могут быть проблемы, с которыми я не сталкивался / не сталкивался. @Compo может иметь более эффективные способы проверки ввода.