[Quote]

    PresserF
  • 31660
  • Longevity: 26 days
  • Posts: 4
  • REPUTATION:0

    [+] [-]
JuraAD, попробовал добавить к пакетному файлу команду, не помогло: окно запускается, а вот выполнение :abc нет.
@echo off
chcp 866
set title=Update Switcher
:start
cls
ECHO %Title%
ECHO.
ECHO 1. Вкл./откл. обновления
ECHO.
ECHO 2. Вернуться в меню
ECHO.
ECHO 3. Выход
ECHO.
set /p choice=Choose an option for function:
if '%choice%'=='' ECHO "%choice%" is incorrect. Try again.
if '%choice%'=='1' goto 1
if '%choice%'=='2' goto cde
if '%choice%'=='3' goto end
goto start
:1
start "uso" cmd /b & call :abc
exit /b !ERRORLEVEL!
:abc
@echo off
title Автоматическое обновление Windows
>nul 2>&1 dism.exe|| (
echo/
echo  Ошибка! Требуются права Администратора.
echo/
pause
exit
)
if defined PROCESSOR_ARCHITEW6432 (
start %windir%\Sysnative\cmd.exe /c %0
exit
)
cls
echo/
set TrustedInstaller=*S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464
set var=%windir%\System32\wuaueng.dll
icacls.exe %var%| >nul find "BUILTIN"|| goto next
call :status РАЗРЕШЕНО 0a
call :msg "Запретить автоматическое обновления Windows?"&& (
cls
echo/
echo Запрещаю автоматическое обновление...
echo ──────────────────────────────────────────────────────────────
2>nul net stop wuauserv
takeown.exe /f %var% /a
icacls.exe %var% /reset
icacls.exe %var% /inheritance:r
echo ──────────────────────────────────────────────────────────────
echo Готово.
call :status ЗАПРЕЩЕНО 0c
pause
)
exit
:next
set donor=%windir%\System32\ntdll.dll
for %%i in (%var%) do set fname=%%~nxi
call :status ЗАПРЕЩЕНО 0c
call :msg "Разрешить автоматическое обновление Windows?"&& (
cls
echo/
echo Разрешаю автоматическое обновление...
echo ──────────────────────────────────────────────────────────────
echo f| >nul xcopy /oxy %donor% %tmp%\%fname%
pushd %tmp%
>nul icacls.exe %fname% /save %fname%.acl
popd
icacls.exe %var% /reset
icacls.exe %var% /setowner %TrustedInstaller%
icacls.exe %windir%\System32 /restore %tmp%\%fname%.acl
del /q %tmp%\%fname%*
echo ──────────────────────────────────────────────────────────────
echo Готово.
call :status РАЗРЕШЕНО 0a
pause
)
exit
:status
color %2
echo/
echo ──────────────────────────────────────────────────────────────
echo        Статус автоматического обновления: * %1 *
echo ──────────────────────────────────────────────────────────────
echo/
exit /b
:msg
set ask=& set /p "ask=%~1 [1=Да/0=Нет]:"
if "%ask%" neq "1" exit /b 1
:msg
for /f "delims=" %%y in ('cscript.exe //nologo //e:jscript %self% %1 %2 %3') do exit /b %%y
WScript.Echo (WScript.CreateObject("WScript.Shell").Popup(WScript.Arguments(0), 0, WScript.Arguments(1), WScript.Arguments(2)))
cls
ECHO abc

[Quote]

    JuraAD
  • 28398
  • Longevity: 1 year 6 months
  • Posts: 47
  • REPUTATION:17

    [+] [-]
PresserF, Как оно вызовет :abc , если выполняется в отдельном процессе? (она не увидит эту метку в принципе)
Напиши функцию в отдельном файле и вызови - если сильно нужно... -)
Кроме того, чтоб анализировать код возврата, нужно дождаться завершения процесса (ключик - wait), так ты его запустил параллельно к основному... (exit /b !ERRORLEVEL!)
Есть вариант вызова одного CMD с разными функциями - в начале смд написать выбор (конвеер) функций

[Quote]

    PresserF
  • 31660
  • Longevity: 26 days
  • Posts: 4
  • REPUTATION:0

    [+] [-]
JuraAD, все сделать в одном пакетном батнике не получится? Извините, только учусь писать скрипты. Про команду start, это из глубин инета взято, только оно не работает вовсе. Идея объединить куча батников в один пакетный.

[Quote]

    JuraAD
  • 28398
  • Longevity: 1 year 6 months
  • Posts: 47
  • REPUTATION:17

    [+] [-]
Примеры для теста кода возврата:
start "test" /wait cmd /c exit /b 0& if errorlevel 1 echo not 0
start "test" /wait cmd /c exit /b 1& if errorlevel 1 echo not 0
Если пример не понятен, напиши...
"test" - заголовок
/wait - ждать завершения
cmd /c - выполнить и завершить независимо от ошибок (/k - если встретятся ошибки, консоль останется активной)
потестируй разницу и прочувствуй:
start "test" /wait cmd /c 12334exit /b 1& if errorlevel 1 echo not 0
start "test" /wait cmd /k 12334exit /b 1& if errorlevel 1 echo not 0
exit /b 0 - завершить с кодом возврата (без ключика /b по-разному работает, в нашем случае не видно)
if errorlevel 1 echo not 0 - анализ кода возврата (если ниже 1 = false - не выводит сообщение)
зы: работы много, сил нет разбирать пример, позже...
зызы: все можно сделать в одном файле, зависит от методов и алгоритмов...

[Quote]

    PresserF
  • 31660
  • Longevity: 26 days
  • Posts: 4
  • REPUTATION:0

    [+] [-]
JuraAD, попробовал, в первом случае start "test" /wait cmd /c 12334exit /b 1& if errorlevel 1 echo not 0, окно открывается и сразу закрывается, а во втором - окно открыто постоянно. Только вот не задача, если добавить строчку в пакетный файл, окно открывается и сценарий выполняется с начальной страницы, а при переходе в предыдущее окно выводится сообщении о продолжении сценария, и, вне зависимости от выбора окно закрывается.

[Quote]

    JuraAD
  • 28398
  • Longevity: 1 year 6 months
  • Posts: 47
  • REPUTATION:17

    [+] [-]
Конвеер функций - пример "menu.cmd"
@echo off
if /i "%~1" neq ":.menu" (
if /i "%~1" neq ":.menu1" (
if /i "%~1" neq ":.menu2" (
start "menu" cmd /s /k ""%0" :.menu"
exit /b 0
)))
goto %~1
:.menu
echo menu
exit /b 0
:.menu1
echo menu1
exit /b 1
:.menu2
echo menu2
exit /b 2
если просто запустить или с неизвестным параметром (отличным от: ":.menu" ":.menu1" ":.menu2" - регистр не важен) запуститься функция ":.menu" в новом окне...
если:
menu.cmd :.MENU
menu.cmd :.MENU1
menu.cmd :.MENU2
- будет вызвана соответствующая функция...
Самое главное - запускается один скрипт и все описанные функции доступны...
ps: start "menu" cmd /s /k ""%0" :.menu" - ключик /k чёб видно было, что творится...
зызы: почитать справку
if /?
cmd /?
call /?
start /?
exit /?

Page 83 of 83


Display posts:    

Current time is: 08-Feb 23:20

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