@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
IF "%1"=="" (
	ECHO.%~nx0 - Calculates factorials recursively.
	ECHO.
	ECHO.Usage
	ECHO.  %~n0 [num]
	ECHO.
	ECHO.  [num] is the number to get the factorial of.
	GOTO end
)
IF %1 LSS 0 (
	ECHO.Argument must be non-negative.
	GOTO end
)

CALL :fac %1
ECHO %RETURN%

:end
ENDLOCAL
GOTO :EOF

:fac
IF %1==0 (
	SET RETURN=1
	GOTO :EOF
)
SET /A TEMP=%1 - 1
CALL :fac %TEMP%
SET /A RETURN*=%1
GOTO :EOF