Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Батник просто закрывается (http://forum.oszone.net/showthread.php?t=330170)

Darkar25 29-09-2017 22:36 2767660

Батник просто закрывается
 
что я делаю не так?
Код:

setlocal enableextensions enabledelayedexpansion
@Echo OFF
set /A "VAR=8" //Задаём проверяемую переменную
set /A "CHECK=0" //задаём проверяющюю перменную
:DLINACHECK //начало цикла проверки
set /A "CHECK+=1" //увеличиваем проверяющюю переменную на 1
if "!VAR!"=="!CHECK!" (goto END) else if "!CHECK!"="10" (goto ENDEND) else goto DLINACHECK //проверяем,если проверяемая переменная равна проверяющей то идти к успешному концу,иначе проверить равна ли проверяющая переменная 10-ти если равна идти к неудачному концу иначе идти к началу цикла проверки
:END //удачный конец
Echo FOUND
pause
:ENDEND //Неудачный конец
echo NOT FOUND
pause
endlocal

комментарии писал уже на форуме так-что не кричите на меня что типо изза коментов не робит батник...
при запуске батника он просто закрывается...
суть:пытаюсь на цикле реализовать проверку на длину содержимого переменной...да,я знаю,похожая тема от меня уже была...там Iska предлогал более короткий вариант но я так и не допер как им пользоваться))
либо я разучился писать батники либо не стоило смотреть 11 гайдов по C# подряд в режиме марафона...

Iska 29-09-2017 23:03 2767667

Цитата:

Цитата Darkar25
комментарии писал уже на форуме так-что не кричите на меня что типо изза коментов не робит батник... »

И тем не менее:
Цитата:

Код:

C:\Мои проекты\0119>setlocal enableextensions enabledelayedexpansion
Непредвиденное появление: ="10".


Берётесь писать комментарии — для них есть REM.

Цитата:

Цитата Darkar25
да,я знаю,похожая тема от меня уже была...там Iska предлогал более короткий вариант но я так и не допер как им пользоваться)) »

Спрашивайте, не стесняйтесь. Только там спрашивайте, не здесь.

Там мы проверяли длину строки. А здесь что Вы хотите сделать?

Цитата:

Цитата Darkar25
либо не стоило смотреть 11 гайдов по C# подряд в режиме марафона... »

Не стоило. Лучше взять книжку страниц на тысячи полторы.

sioyong 29-09-2017 23:13 2767669

Iska, Замечал много где пишут такие точки :: это тоже коментарий, где про этом ожно почитать?

Darkar25 29-09-2017 23:18 2767672

Цитата:

Цитата Iska
Цитата Darkar25:
либо не стоило смотреть 11 гайдов по C# подряд в режиме марафона... »
Не стоило. Лучше взять книжку страниц на тысячи полторы. »

не...я имею виду что это как в школе...ты проучился среднюю школу пошел в старшую и ты учишься и чему-то даже смог научиться но вот вспомнить чему тебя учили в средней школе уже не можешь...
Цитата:

Цитата Iska
И тем не менее:
Цитата:
Код:
C:\Мои проекты\0119>setlocal enableextensions enabledelayedexpansion
Непредвиденное появление: ="10". »

а вот сейчас тот момент когда я понимаю что забыл поставить еще одно равно)))
теперь все норм...

Цитата:

Цитата Iska
Там мы проверяли длину строки. А здесь что Вы хотите сделать? »

примерно тоже самое...
VAR- это переменная которая получается при вычислении длины строки...
CHECK- это максимальное и одновременно минимальное число символов которое должно быть в строке
как работает CHECK?
сначала ей задается число на 1 меньше минимального числа символов в цикле ей зачисляется по 1 очку каждый прокрут...если переменная CHECK доходит до максимального кол-ва символов цикл прекращается и выводится сообщение с ошибкой(запланированной)...

Iska 29-09-2017 23:47 2767679

Цитата:

Цитата sioyong
Iska, Замечал много где пишут такие точки :: это тоже коментарий, где про этом ожно почитать? »

Это ни разу не комментарий. Двоеточие — это метка. Два двоеточия подряд — ошибочная метка. Так делать не следует. Некоторые несознательные личности ;) пользуются тем, что интерпретатор команд не обрывает исполнение пакетного файла на месте таких ошибочных меток и даже не сообщает об ошибке.

Цитата:

Цитата Darkar25
примерно тоже самое...
VAR- это переменная которая получается при вычислении длины строки... »

Не надо вычислять длину строки. Я же уже показал, как проверять длину строки на допустимые пределы в той теме: CMD/BAT - числовая переменная больше числа или нет.

sioyong 29-09-2017 23:56 2767682

Iska, Что такое метка, для чего она? Ч ем это плохо? Iska, Я в ком. строке ввожу /? там ничего про это не написано. где можно почитать? Извините если не в тему.

Iska 30-09-2017 02:16 2767694

Цитата:

Цитата sioyong
Iska, Что такое метка, для чего она? »

Место в пакетном файле, на которое можно передать управление посредством goto или call.

Цитата:

Цитата sioyong
Ч ем это плохо? »

Тем, что это не комментарий.

Цитата:

Цитата sioyong
где можно почитать? »

Код:

goto /?
call /?

Download Windows Command Reference from Official Microsoft Download Center

alpap 30-09-2017 02:33 2767696

sioyong,
попробуйте поставить во второй строке комментария вместо "rem" - "::" и увидите что код начнет захлопываться, поэтому никто не использует "::" в качестве начала комментария в for или можно взять за привычку не использовать вообще нигде
Код:

@echo off
title Spravka &: Еще и такой комментарий используют некоторые
for %%a in (goto call) do (
 :: Справка по командам с меткой перехода
 %%a /?
 rem Справка по командам с меткой перехода
)
pause


alpap 30-09-2017 02:57 2767699

еще добавлю. Вот здесь видна разница между меткой и комментарием:
Код:

@echo off
set "s=slovo"
call :%s%
pause& exit

::slovo
 echo Переход на эту метку не будет произведен
exit /b

:slovo
 echo Переход на эту метку произведен
exit /b

Получается перейти на строку комментария нельзя, но найти строку комментария можно:
Код:

@echo off
set "s=slovo"
<"%~f0" find "::%s%" && call :%s%
pause& exit

::slovo
 echo Переход на эту метку не будет произведен
exit /b

:slovo
 echo Переход на эту метку произведен
exit /b


Darkar25 30-09-2017 13:32 2767734

Цитата:

Цитата Iska
Не надо вычислять длину строки. »

именно в этом коде нет.
я планирую его вставить в батник где вычисляется длина и вбивается в переменную,после чего она проверяется этим кодом
Код:

:DLINACHECK
set /A "CHECK+=1"
if "!VAR!"=="!CHECK!" (goto END) else if "!CHECK!"=="10" (goto ENDEND) else goto DLINACHECK

после чего если число входит в 1-10(в батнике в который я вставляю эту проверку 8-62) то оно идет дальше иначе возвращает к вводу строки и последующему вычислению длины и проверки...и так пока не будет введена строка корректной длины

sioyong 01-10-2017 00:26 2767809

Iska, Про goto не знал спасибо.
alpap, Спасибо. Про title знаю, если сделать так>>
title "Spravka &: Еще и такой комментарий используют некоторые"
отработает норм.
alpap, За примеры спасибо, теперь начинаю понимать.
Iska, alpap, Спасибо братки, очень помогли.


Время: 00:35.

Время: 00:35.
© OSzone.net 2001-