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


Автор: UserNet 24.2.2009, 10:25
Товарищи проблема в следующем
есть следующий бат файл
Код

@echo off
echo %1 %2 %3

set /a total=%2-%2/100*100
if %1==4 (set /a block1=1 & set /a block2=2 & set /a raz=16)
if %1==3 (set /a block1=4 & set /a block2=3 & set /a raz=16)
if %1==2 (set /a block1=5 & set /a block2=6 & set /a raz=24)

if %total% LEQ %raz% (echo 3 & set /a tmp=block1 & set /a lastoct=10*%total%+%3) else (set /a lastoct=%total%*10-%raz%*10+%3 & set /a tmp=block2)

set /a thoct=%tmp%*10+%2/100
set aa=10.10.%thoct%.%lastoct%
echo %aa%
rem netsh interface ip set address main  static %aa% 255.255.128.0 10.10.0.1 1


if %thoct%==10 (set /a thmac1=0 & set /a th=A)
if %thoct%==11 (set /a thmac1=0 & set /a th=B)
if %thoct%==12 (set /a thmac1=0 & set /a th=C)
if %thoct%==13 (set /a thmac1=0 & set /a th=D)
if %thoct%==14 (set /a thmac1=0 & set /a th=E)
if %thoct%==15 (set /a thmac1=0 & set /a th=F)
if %thoct%==16 (set /a thmac1=1 & set /a th=0)

echo %thoct%

if %thoct% GEQ 17 (set /a thmac1= %thoct%/16 & set /a th=%thoct%-16*%thmac1%)

rem if %th% LSS 0 (set /a th=%th%+16)

if %th%==10 set th=A
if %th%==11 set th=B
if %th%==12 set th=C
if %th%==13 set th=D
if %th%==14 set th=E 
if %th%==15 set th=F

set amac=%thmac1%%th% 

echo %thmac1%
echo %th%

echo %amac%
echo step1
rem echo %th%

rem if %lastoct%==10 set bmac=0A
rem if %lastoct%==11 set bmac=0B
rem if %lastoct%==12 set bmac=0C
rem if %lastoct%==13 set bmac=0D
rem if %lastoct%==14 set bmac=0E 
rem if %lastoct%==15 set bmac=0F
rem if %lastoct%==16 set bmac=10

rem if %lastoct% GEQ 17 (set /a thmac1= %lastoct%/16 & set rem /a th=%lastoct%-16*%thmac1% & set bmac=%thmac1%%th%)

rem echo %bmac%
rem echo %th%
rem echo %thmac1%
rem set  mac=00000A0A%amac%%bmac%
set mac=00000A0A%amac%
echo %mac%

Запускаю его с параметром, 2 417 2
сначала возникает надпись про непредвиденное появление оператора set, при повторном запуске всё нормально, и плюс ещё иногда не стого, не с сего, глючат результат,
затем допустим  
4 417 2
Откуда невозьмись берётся -24
Повторно с этими же параметрами, вычисляет нормально, в чём баг?

Автор: Thinker 24.2.2009, 11:14
Удали все REM и увидишь, где есть косяки.

Автор: UserNet 24.2.2009, 14:58
А по существу вопроса, можно ответ услышать?

Автор: Akina 24.2.2009, 18:26
Тебе очень даже по существу ответили.

Косяки в программах ищут при помощи трассировки кода. Батчи напрямую не трассируются, но можно после хоть каждой строки выводить на экран или в файл текущее состояние используемых переменных среды. Это даст возможность определить точки возникновения проблем и понять причины их возникновения.

Автор: 01MDM 25.2.2009, 20:36
UserNet, 
Закоментируй или убери @echo off и перенаправь вывод батника в файл. Тогда можно разобраться в чем проблема.

Код

C:\> your.cmd 2 417 2 1>file.txt

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