bab_mail

http://otvet.mail.ru/question/167521634

May 30th, 2014
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 2.52 KB | None | 0 0
  1. @cls
  2. @echo off
  3. set fname=%0
  4. for /f %%I in ("%fname%") do set fname=%%~fI
  5. for /f %%I in ("%fname%") do set fname=%%~nI%%~xI
  6. if "%1" == "" call :empty
  7. if "%1" == "/?" call :empty & goto :eof
  8. if "%1" NEQ "" call :first %*
  9. goto :eof
  10.  
  11. :empty
  12. echo Утилита %fname%
  13. echo Использование:
  14. echo    %fname% [/?]
  15. echo        получить справку
  16. echo    %fname% A B C
  17. echo        передать три числа, среди которых надо найти наименьшее. Числа не должны превышать 9999
  18. goto :eof
  19.  
  20. :first
  21. REM Первый параметр есть
  22. if "%2" neq "" (call :second %*) else (
  23. call :less
  24. )
  25. goto :eof
  26.  
  27. :second
  28. REM Второй параметр есть
  29. if "%3" neq "" (call :third %*) else (
  30. call :less
  31. )
  32. goto :eof
  33.  
  34. :min
  35. if %1 lss %2 (exit /b %1) else (
  36. if %2 lss %1 (exit /b %2) else (
  37. exit /b 10000
  38. )
  39. )
  40.  
  41. :cmp
  42. set f=0
  43. if %1==%2 set /a f=%f% + 1
  44. if %1==%3 set /a f=%f% + 1
  45. if %2==%3 set /a f=%f% + 1
  46. exit /b %f%
  47.  
  48. :case0
  49. set min=%1
  50. call :min %min% %2
  51. set min=%errorlevel%
  52. call :min %min% %3
  53. set min=%errorlevel%
  54. echo Все параметры различаются: 1-й равен %1, 2-й равен %2, 3-й равен %3
  55. echo Минимальный равен %min%
  56. goto :eof
  57.  
  58. :case1
  59. if %1==%2 echo Есть совпадающие параметры (1-й и 2-й равны %1, 3-й равен %3)
  60. if %1==%3 echo Есть совпадающие параметры (1-й и 3-й равны %1, 2-й равен %2)
  61. if %3==%2 echo Есть совпадающие параметры (2-й и 3-й равны %2, 1-й равен %1)
  62. call :min %1 %3
  63. if %errorlevel%==10000 set min=%1
  64. call :min %min% %2
  65. if %errorlevel%==10000 (set min=%2) else (set min=%errorlevel%)
  66. echo Минимальный равен %min%
  67. )
  68. goto :eof
  69.  
  70. :case3
  71. echo Параметры равны и равны %1
  72. goto :eof
  73.  
  74. :findmin
  75. call :cmp %*
  76. call :case%errorlevel% %*
  77. goto :eof
  78.  
  79. :third
  80. REM Третий параметр есть
  81. if "%4" neq "" call :many
  82. if "%errorlevel%" == "1" exit /b
  83. call :findmin %1 %2 %3
  84. goto :eof
  85.  
  86. :many
  87. REM Четвертый параметр есть
  88. echo Слишком много параметров
  89. echo Используйте ключ /?, чтобы познакомиться с синтаксисом
  90. exit /b 1
  91.  
  92. :less
  93. REM Мало параметров
  94. echo Слишком мало параметров
  95. echo Используйте ключ /?, чтобы познакомиться с синтаксисом
  96. exit /b 1
Add Comment
Please, Sign In to add comment