[Quote]

    cartmenezz
  • 1384
  • Longevity: 5 years 8 months
  • Posts: 339
  • REPUTATION:8

    [+] [-]
  • Location: Калининград
ttng, он здесь, вроде как, в последнее время не тусуется, спросите тут:
http://forum.ru-board.com/profile.cgi?action=show&member=dialmak

[Quote]

    ttng
  • 20627
  • Longevity: 2 years 1 month
  • Posts: 15
  • REPUTATION:0

    [+] [-]
cartmenezz, Спасибо, загляну туда))) ну и надеюсь, ответит тот камрад, которому он этот батник делал))) он вроде здесь, хоть и заглядывает редко)))

[Quote]

    WGordy26
  • 27
  • Longevity: 6 years 5 months
  • Posts: 27
  • REPUTATION:2

    [+] [-]
ttng,
Может то , что вам надо.https://disk.yandex.ru/d/WvDJXwg-J6_wVg[/url]

[Quote]

    darkalexx4
  • 346
  • Longevity: 6 years 2 months
  • Posts: 154
  • REPUTATION:5

    [+] [-]
  • Location: Минск
initial_disk_v2
Кидаю обновленную ссылку, кому вдруг пригодится :-)
Всех с праздником.
Христос Воскрес!

[Quote]

    Gvint64
  • 24573
  • Longevity: 11 months 27 days
  • Posts: 206
  • REPUTATION:22

    [+] [-]
aa На поигратся - ничего серьёзного - простой проигрыватель аудио видео и прямых ссылок - запустить PlayF.cmd или выбрать что нибудь из примеров Скачать

[Quote]

    cartmenezz
  • 1384
  • Longevity: 5 years 8 months
  • Posts: 339
  • REPUTATION:8

    [+] [-]
  • Location: Калининград
Ander_73, Здравствуйте aa
я тут пытаюсь потихоньку просвещаться...
сейчас вот читал немного про SetLocal, насчет EnableDelayedExpansion вы уже упоминали, что пользоваться желательно лишь тогда, когда нет других вариантов...
интересует параметр EnableExtensions. пишут:
EnableExtensions - обычно включена в системе по-умолчанию.
Но может быть выключена принудительно через реестр, а также по-умолчанию, выключена в некоторых старых ОС.
Поэтому, ее желательно включать во все скрипты.
подумал взять на вооружение добавлять в начало скрипта, всего одна строчка, есть не просит..
Возник вопрос, вот у меня например есть батник, и там много подпрограмм, в некоторых из них задействуются переменные, часто имена повторяются... вроде как обнулять значения не забываю, но тем не менее перестраховываюсь - каждая метка начинается с SetLocal.
Вопрос: достаточно ли в шапке батника один раз прописать SetLocal EnableExtensions, или в моем случае надо будет и в каждой метке (подпрограмме) изменить SetLocal на SetLocal EnableExtensions ??? Здравый смысл подсказывает, что то что прописано в шапке должно распростроняться на весть батник, но вдруг все-таки надо для каждого SetLocal расписывать требующиеся параметры (или иначе вообще его не прописывать)
ЗЫ: раз уж начал задавать глупые вопросы, сразу еще один:
есть ли принципиальная разница м/у ' GoTo :EOF ' и ' exit /b ' ? (погуглить я не забыл, но никакой конкретики не нашел)


Last edited by cartmenezz on 2021-05-04 23:11; edited 1 time in total

[Quote]

    Ander_73
  • 15549
  • Longevity: 4 years 3 months
  • Posts: 2248
  • REPUTATION:127

    [+] [-]
cartmenezz, aa
Я сам не знаю, что делает EnableExtensions ag
85295достаточно ли в шапке батника один раз прописать SetLocal
Важно понимать, что это не "директива компиляции", а обычная команда. Она выполняет выделение нового стека переменных и копирование туда текущих значений. Блок должен обязательно заканчиваться командой EndLocal, который освобождает выделенный стек и делает текущим предыдущий (до команды SetLocal). Вся эта чехарда обычно нужна при вызове стороннего батника (или крупной процедуры), в котором неизвестно какие пременные и что он там меняет по ходу пьесы. То есть:
setlocal
call other_file.cmd
endlocal
обеспечит безопасность собственных переменных. Потому что все изменения в переменных, которые сторонний батник произведёт, будут сброшены командой EndLocal.
85295есть ли принципиальная разница м/у ' GoTo :EOF ' и ' exit /b
На мой взгляд, нет. Есть, как обычно, нюанс. С помощью exit /b можно "передать наружу" код завершения.
Типа:
exit /b 12
завершит процедуру/батник с errorlevel = 12. В то время как GoTo :EOF завершит процедуру/батник с текущим значением errorlevel (так можно передать "наружу" итог выполнения последней команды, потому что goto не меняет значение errorlevel).

[Quote]

    cartmenezz
  • 1384
  • Longevity: 5 years 8 months
  • Posts: 339
  • REPUTATION:8

    [+] [-]
  • Location: Калининград
85296Вся эта чехарда обычно нужна при вызове стороннего батника (или крупной процедуры)
Т.е. в пределах одного своего батника можно не заморачиваться?
85296С помощью exit /b можно "передать наружу" код завершения
85296GoTo :EOF завершит процедуру/батник с текущим значением errorlevel
получается после GoTo :EOF имеем реальный errorlevel, а при exit /b можем его "придумать" (правда в голову не приходит для каких ситуаций это может пригодиться)?
Добавлено через 17 минут 43 секунды:
у меня в батнике, если очень упрощенно, имеется структура
SetLocal
:start
пункты меню:
1 2 3 4 5 ...
выбор пункта:
set /p var=
перход к метке с номером пункта:
call %var%
echo.
pause
GoTo :start
:1
SetLocal
...
EndLocal
exit /b
:2
SetLocal
...
EndLocal
exit /b
:...
и меня прям напрягало что при возврате в основное меню остаются хвосты значений переменных, потому что они пойдут дальше при выборе нового пункта и переходе к новой метке (даже по началу "выбором пункта" прописывал строки с выводом через echo значиний переменных, имеющихся в подпрограмме, и проверял чтобы эти строки оставались пустыми при возврате в основное меню))
поэтому батник и оброс этими SetLocal и Endlocal ...
Кстати, попадалась, что вроде Endlocal необязательно писать, что выполнится итак при завершении батника/подпрограммы
P/S: если все-таки не отказываться полностью от моей паранойи c очищением переменных при возврате в основное меню, я правильно понимаю что достаточно будет сделать вот так:
выбор пункта:
set /p var=
перход к метке с номером пункта:
SetLocal
call %var%
EndLocal
echo.
pause
GoTo :start
а все остальные SetLocal/EndLocal поубирать?

[Quote]

    Eagle123
  • 205
  • Longevity: 6 years 3 months
  • Posts: 129
  • REPUTATION:7

    [+] [-]
Приветствую всех, может кто-нибудь знает, как на cmd написать скрипт, чтобы он спросил у пользователя: "Если вы хотите сделать это действие, то нажмите любую клавишу" и при этом бы дал время на ответ пользователю только N секунд, по прошествии которых, если пользователь ничего не нажал, то выполнить один код, а если нажал любую клавишу, то таймер останавливается и выполняется другой код.
Можно запустить choice, но он предлагает только две клавиши на выбор, а не все клавиши клавиатуры. Есть timeout, но в нем нет никакого выбора...

[Quote]

    vovan1982
  • 214
  • Longevity: 6 years 3 months
  • Posts: 1025
  • REPUTATION:69

    [+] [-]
  • Location: Ростов-на-Дону
Eagle123, привет. Используй Wbox.exe

[Quote]

    Ander_73
  • 15549
  • Longevity: 4 years 3 months
  • Posts: 2248
  • REPUTATION:127

    [+] [-]
85297Endlocal необязательно писать, что выполнится итак при завершении батника/подпрограммы
Корректней сказать: "при завершении выполнения cmd.exe". Потому что батник можно вызвать из другого батника и завершение вызванного батника не вызовет автоматического выполнения endlocal. Код:
:proc
setlocal
...
if %var%==0 exit /b
...
endlocal
goto :eof
пример типичной "лажи". Выход из процедуры не означает выполнения endlocal.
85297остальные SetLocal/EndLocal поубирать
Да, "обрамлять" вызов процедуры проще и компактней, чем пихать в каждую.
Не запутайся в переменных. af-Вот пример задания (и использования) errorlevel:
call :proc&& goto success|| goto fail
:proc
if %var%==0 exit /b 1
exit /b 0
(exit /b 0 имеет смысл писать, если нужно вернуть однозначно 0, а результат предыдущей операции (его errorlevel) неясен)

[Quote]

    cartmenezz
  • 1384
  • Longevity: 5 years 8 months
  • Posts: 339
  • REPUTATION:8

    [+] [-]
  • Location: Калининград
85302Вот пример задания (и использования) errorlevel
Благодарствую
85302Да, "обрамлять" вызов процедуры проще и компактней, чем пихать в каждую
Отлично))
85302пример типичной "лажи". Выход из процедуры не означает выполнения endlocal
потому что до скрипт не доберется до строчки endlocal если var=0 ?
Касаемо того что я находил вот такую формулировку:
"При достижении конца пакетного файла автоматически выполняется команда ENDLOCAL" (это было на ab57.ru, и не только)
Мои эксперименты показали что и для подпрограмм это работает, еще раз освежил память как у меня там сейчас все прописано, в подпрограммах EndLocal я поубирал (кое-где только пропустил), так как и без него значения переменных обнулялись.
Так что я до этого скинул немного неправильную структуру, на самом деле сейчас у меня так:
SetLocal
:start
пункты меню:
1 2 3 4 5 ...
выбор пункта:
set /p var=
перход к метке с номером пункта:
call %var%
echo.
pause
GoTo :start
:1
SetLocal
...
exit /b
:2
SetLocal
...
exit /b
:...

-
Сейчас еще раз, на свежую голову, решил себя перепроверить, накидал пустышку:
@echo off
:start
cls
echo var_1=%var_1%
echo var_2=%var_2%
echo var_3=%var_3%
echo.
pause
call :test
echo.
pause
goto :start
:test
cls
::SetLocal
set var_1=111
set var_2=222
set var_3=333
exit /b
при возврате на :start значения переменных пустые, если раскомментировать SetLocal, без указания EndLocal
ЗЫ: не с целью поспорить или что-то доказать, возможно в разных версиях винды работает по разному?

[Quote]

    Ander_73
  • 15549
  • Longevity: 4 years 3 months
  • Posts: 2248
  • REPUTATION:127

    [+] [-]
cartmenezz, хм, действительно. Значит, я неправ. Ну, тем проще.-Eagle123, если не нужна работе в WinPE, могу предложить вариант с VBS:
@echo off
>tst.vbs echo WScript.Echo CreateObject("WScript.Shell").Popup(Replace(WScript.Arguments(0), "^", vbCrLf), WScript.Arguments(1), WScript.Arguments(2), WScript.Arguments(3))
for /f %%a in ('cscript //nologo tst.vbs "Для выбора верного решения нажмите 'Ок'" 10 " Заголовок" 65') do set code=%%a
del /q tst.vbs
if %code%==-1 echo Time is over!
if %code%==1  echo Ok is pressed.
if %code%==2  echo Action canceled.
10 - это ожидание реакции 10 секунд.

[Quote]

    Eagle123
  • 205
  • Longevity: 6 years 3 months
  • Posts: 129
  • REPUTATION:7

    [+] [-]
vovan1982, Ander_73,
Ух ты, спасибо большое за решения, попробую!

[Quote]

    cartmenezz
  • 1384
  • Longevity: 5 years 8 months
  • Posts: 339
  • REPUTATION:8

    [+] [-]
  • Location: Калининград
Ander_73, разрешите ещё вопросик,
возможно ли добавить пробел (или несколько) в начало "PromptString" в конструкции:
set /p "var=ВВОД: "
тоесть, чтобы в консоли отображалось не "ВВОД: ", а " ВВОД:"

Page 46 of 48


Display posts:    

Current time is: 08-May 07:03

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum