Работающий вариант. Я постарался прокомментировать код, но если что непонятно будет - спрашивайте.
Код:
![Выделить весь код](images/misc/selectcode.png)
@Echo Off
SetLocal EnableDelayedExpansion
:: Запрашиваем данные у юзера
Set /P Value=Enter a number:^>
:: Проверка введённых данных
Echo %Value%|Findstr /R "[0-9]">Nul||(Echo Only numeric value accepted&Pause&Exit)
If %Value% LSS 0 (Echo Error: negative value&Pause&Exit)
If %Value% GEQ 2147483648 (Echo Error: out of acceptable range&Pause&Exit)
:: Считаем факториал. В связи с ограничениями арифметики в cmd, факториал считается до 16 включительно
Set Result=1
For /L %%A In (1,1,%Value%) Do (
Set /A Result=!Result!*%%A
If !Result! GEQ 2147483648 (Echo Error: variable overflow&Pause&Exit)
)
:: Отключаем расширенную обработку для вывода восклицательного знака
SetLocal DisableDelayedExpansion
Echo %Value%! = %Result%
Pause