Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Командные файлы (.bat)


Автор: mihrimah 8.3.2015, 10:31
1. В заданном каталоге и его подкаталогах найти общее количество подкаталогов. На экран вывести только результат.
Код КФ получился такой:
Код

@echo off
for /D %%i in (%1\*.*) do set /A i+=1
echo The total number of subdirectories is %i%


Параметром %1 передается каталог, в котором и необходимо подсчитать общее число подкаталогов.

Но считает неправильно. Причем при многократном выполнении программы, число подкаталогов увеличивается (несмотря на то, что путь к каталогу остается прежним).

2. Вычисление и вывод на экран значения факториала целого числа, задаваемого при запуске КФ. Предусмотреть проверку заданного значения и при задании отрицательного значения или значения, превышающего максимально возможную величину, выводить соответствующие сообщения. 
Вот что я накидал (не пугайтесь ужасающей безграмотности кода, я в этом чайник, не волшебник, как говрится, а токма учусь):

Код

@echo off
if %1==0 echo n!= 1
if %1 LSS 0 goto negative
:negative 
echo You entered a negative number. Please, try again. 
if %1 GTR 100 goto large 
:large 
echo Your number is too large. Please, try again.
for /L %%i in (1,1,10) do (set /A n*=%%i& goto ok)
:ok 
echo n! = %n%


Число, факториал которого надо вычислить, передается параметром КФ %1. 
Конечно, оно не работает. Вернее, работает только когда параметром передается 0, но и то не так, как надо: на экран выводятся все echo, несмотря на метки...


Автор: 01MDM 13.3.2015, 23:00
1. Не забывайте о setlocal, он ограничивает жизнь переменных пределами исполнения батника. Следовательно при повторном запуске переменная будет создана заново, а не импортирована из предыдущего запуска.
Код

@echo off
setlocal

if "%~1"=="" goto:eof

for /f %%i in ('dir /b /ad %1') do set /a i+=1
echo %i%


2. Факториал (запускать без параметров)
Код

@echo off
setlocal

set /p fact="Factorial: "
echo -----
if not defined fact (echo NULL & goto:eof)
if %fact% lss 0 (echo Input value must be ^>= 0 & goto:eof)

set /a fact-=1
set res=1
for /l %%i in (0,1,%fact%) do set /a res*=%%i+1

echo %res%

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)