|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Условие IF и скобки |
|
CMD/BAT - Условие IF и скобки
|
Новый участник Сообщения: 22 |
Приветствую!
Помогите, пожалуйста, не могу понять чего не хватает. Нужно добавить в батнике по условию параметры в реестр. Как только вношу строки в условие, используя скобки, то перестаёт корректно отрабатывать. Так работает: REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "NETLangPack" /T "REG_SZ" /D "%PathRoot%\NDP46-KB3045557-x86-x64-AllOS-RUS.exe /q /norestart" /F ECHO. ECHO Changing default system settings ECHO. ECHO Turn off Let apps use my advertising ID for experiences across apps reg ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo" /v Enabled /t REG_DWORD /d 0 /f ECHO. setlocal enableextensions enabledelayedexpansion IF /I %major-version% LEQ 6 ( ECHO. ECHO Installing: "Microsoft .NET Framework 4.6"... SET PathFile=dotNetFx4\NDP46-KB3045557-x86-x64-AllOS-ENU.exe IF EXIST %PathRoot%\!PathFile! ( REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "NETLangPack" /T "REG_SZ" /D "%PathRoot%\NDP46-KB3045557-x86-x64-AllOS-RUS.exe /q /norestart" /F ECHO %done% ) ) IF /I %major-version% GEQ 10 ( ECHO. ECHO Changing default system settings ECHO. ECHO Turn off Let apps use my advertising ID for experiences across apps reg ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo" /v Enabled /t REG_DWORD /d 0 /f ECHO. ECHO Done ) Повторять десятки раз кусок кода IF /I %major-version% GEQ 10 ни разу не вставляет в таких случаях. |
|
Отправлено: 15:39, 10-12-2016 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Вы чего-то не договариваете, как мне кажется. Что именно «не работает»? И покажите полный код.
|
Отправлено: 15:56, 10-12-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Раньше код был более примитивный, с кучей повторений, частенько при редактировании это сильно напрягало. Сейчас провёл небольшую оптимизацию, но не отрабатывает то, что приведено было выше. Весь код:
@echo off setlocal enableextensions enabledelayedexpansion TITLE Silent installation of applications Set PathRoot=%~dp0 Set PathRoot=%PathRoot:~0,-1% Set PathFile= Set done=Done. :: #Assing variable %version% for OS version For /F "Tokens=2 Delims=[]" %%i In ('ver') Do (For /F "Tokens=2,3 Delims=. " %%a In ("%%i") Do Set version=%%a.%%b) For /F "Tokens=2 Delims=[]" %%i In ('ver') Do (For /F "Tokens=2,3 Delims=. " %%a In ("%%i") Do Set major-version=%%a) IF "%1"=="/office" (Set offver=ver16) && CLS && GOTO setupoffice IF "%1"=="/onlysoft" (Set typesetup=onlysoft) && CLS && GOTO setupoffice ECHO. ECHO Startting installation script... ECHO. ECHO This script will install additional software ECHO. ECHO Are you sure to continue installation? PAUSE ECHO. ECHO You really sure? PAUSE SET interactive=true && CLS :setupoffice ECHO Version OS defined - %version% GOTO setupsofware IF "%offver%"=="ver16" ( IF DEFINED ProgramW6432 ( ECHO Installing: "Microsoft Office 2016 OPK"... SET PathFile=Office16\setup.exe IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /configure %PathRoot%\Office16\configuration_x64.xml ) ELSE ( ECHO. ECHO Installing: "Microsoft Office 2016 OPK"... SET PathFile=Office16\setup.exe IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /configure %PathRoot%\Office16\configuration.xml ) ECHO Setting office setup mode to OEM SET PathFile=Office16\oemsetup.cmd IF EXIST %PathRoot%\!PathFile! CALL %PathRoot%\!PathFile! ECHO %done% ) :setupsofware IF DEFINED ProgramW6432 ( ECHO. ECHO Installing: "Microsoft Visual C++ 2015 Redistributable (x64)"... SET PathFile=VCredist\vc_redist.x64.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /q /norestart ECHO %done% ) ELSE ( ECHO. ECHO Installing: "Microsoft Visual C++ 2015 Redistributable (x86)"... SET PathFile=VCredist\vc_redist.x86.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /q /norestart ECHO %done% ) rem ECHO. rem ECHO Installing: "Adobe Flash Player ActiveX & Plugin"... rem SET PathFile=Adobe\install_flash_player_23_active_x.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! -install rem SET PathFile=Adobe\install_flash_player_23_plugin.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! -install rem SET PathFile=Adobe\install_flash_player_23_ppapi.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! -install rem ECHO %done% rem ECHO. rem ECHO Installing: "Adobe AIR"... rem SET PathFile=Adobe\AdobeAIRInstaller.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! -silent rem ECHO %done% ECHO. ECHO Installing: "Adobe Reader DC"... SET PathFile=Adobe\AcroRdrDC1500720033_MUI.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /sAll /rs SET PathFile=Adobe\AcroRdrDCUpd1502020042_MUI.msp && IF EXIST %PathRoot%\!PathFile! START /wait msiexec /update %PathRoot%\!PathFile! /qn IF EXIST "%PUBLIC%\Desktop\Acrobat Reader DC.lnk" DEL /F /Q "%PUBLIC%\Desktop\Acrobat Reader DC.lnk" IF EXIST "%ALLUSERSPROFILE%\Рабочий стол\Acrobat Reader DC.lnk" DEL /F /Q "%ALLUSERSPROFILE%\Рабочий стол\Acrobat Reader DC.lnk" ECHO %done% IF /I %major-version% LEQ 6 ( ECHO. ECHO Installing: "DirectX End-User Runtimes (June 2010)"... SET PathFile=DirectX\directx_Jun2010_redist.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! -s -sp/silent ECHO %done% ) rem ECHO. rem IF DEFINED ProgramW6432 ( rem ECHO Installing: "Java Version (x64)"... rem SET PathFile=Java\jre-8u101-windows-x64.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /s rem ECHO %done% rem ) rem ECHO Installing: "Java Version (x86)"... rem SET PathFile=Java\jre-8u101-windows-i586.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /s rem ECHO %done% ECHO. ECHO Installing: "K-Lite Codec Pack Mega"... SET PathFile=K-Lite\K-Lite_Codec_Pack_1265_Mega.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /verysilent /norestart /LoadInf="%PathRoot%\K-Lite\klcp_mega_unattended.ini" ECHO %done% IF /I %major-version% LEQ 6 ( ECHO. IF DEFINED ProgramW6432 ( ECHO Installing: "Silverlight 5 (x64)"... SET PathFile=Silverlight\Silverlight_x64.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /q ECHO %done% ) ELSE ( ECHO Installing: "Silverlight 5 (x86)"... SET PathFile=Silverlight\Silverlight.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /q ECHO %done% ) ) ECHO. ECHO Installing: "Skype"... SET PathFile=Skype\SkypeSetupFull.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /VERYSILENT /NOLAUNCH /NOGOOGLE /NOSTARTUP /NOPLUGINS /LANG=ru IF EXIST "%PUBLIC%\Desktop\Skype.lnk" DEL /F /Q "%PUBLIC%\Desktop\Skype.lnk" IF EXIST "%ALLUSERSPROFILE%\Рабочий стол\Skype.lnk" DEL /F /Q "%ALLUSERSPROFILE%\Рабочий стол\Skype.lnk" ECHO %done% ECHO. IF DEFINED ProgramW6432 ( ECHO Installing: "WinRAR 5 (x64)"... SET PathFile=WinRAR\winrar-x64-540ru.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! -s ECHO %done% ) ELSE ( ECHO Installing: "WinRAR 5"... SET PathFile=WinRAR\wrar540ru && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! -s ECHO %done% ) IF "%typesetup%"=="onlysoft" (GOTO end) rem IF /I "%version%"=="6.1" ( rem ECHO. rem ECHO Installing: "Microsoft Internet Explorer 11"... rem IF DEFINED ProgramW6432 ( rem SET PathFile=IE11\IE11-Windows6.1-x64-ru-ru.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /quiet /closeprograms /norestart) ELSE (START /wait %PathRoot%\IE11\IE11-Windows6.1-x86-ru-ru.exe /quiet /closeprograms /norestart) rem ECHO Set default settings for browser: rem ECHO Load hive of default user rem reg LOAD HKU\Default %SYSTEMDRIVE%\Users\Default\NTUSER.DAT rem ECHO Set start with tabs from the the last session rem reg ADD "HKU\Default\Software\Microsoft\Internet Explorer\ContinuousBrowsing" /v Enabled /t REG_DWORD /d 1 /f rem ECHO Set default start page rem reg ADD "HKU\Default\Software\Microsoft\Internet Explorer\Main" /v "Start Page" /t REG_SZ /d "http://www.ya.ru" /f rem ECHO Set always open pop-ups in a new tab rem reg ADD "HKU\Default\Software\Microsoft\Internet Explorer\TabbedBrowsing" /v PopupsUseNewWindow /t REG_DWORD /d 2 /f rem ECHO Unload hive of default user rem reg UNLOAD HKU\Default rem ECHO %done% rem ELSE ( rem ECHO. rem ECHO "Microsoft Internet Explorer 11" - your OS version %version% not compatible with package rem ) IF /I %major-version% LEQ 6 ( ECHO. ECHO Installing: "Microsoft .NET Framework 4.6"... SET PathFile=dotNetFx4\NDP46-KB3045557-x86-x64-AllOS-ENU.exe IF EXIST %PathRoot%\!PathFile! ( START /wait %PathRoot%\!PathFile! /q /norestart REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "NETLangPack" /T "REG_SZ" /D "%PathRoot%\NDP46-KB3045557-x86-x64-AllOS-RUS.exe /q /norestart" /F ECHO %done% ) ) IF /I %major-version% GEQ 10 ( ECHO. ECHO Changing default system settings ECHO. ECHO Turn off Let apps use my advertising ID for experiences across apps reg ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo" /v Enabled /t REG_DWORD /d 0 /f ECHO Turn on SmartScreen Filter to check web content URLs that Windows Store apps use reg ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppHost" /v EnableWebContentEvaluation /t REG_DWORD /d 1 /f ECHO Disable to send your device data to Microsoft reg ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection" /v AllowTelemetry /t REG_DWORD /d 1 /f ECHO Turn off Malicious Software Reporting Tool telemetry reg ADD "HKLM\SOFTWARE\Policies\Microsoft\MRT" /v DontReportInfectionInformation /t REG_DWORD /d 0 /f ECHO Change the level of diagnostic and usage data sent to Basic reg ADD "HKLM\SOFTWARE\Microsoft\Input\TIPC" /v Enabled /t REG_DWORD /d 0 /f ECHO Enable Peer-to-Peer (P2P) Apps & Updates Download from More Than One Place only in local network reg ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" /v DODownloadMode /t REG_DWORD /d 1 /f ECHO. ECHO Load hive of default user reg LOAD HKU\Default %SYSTEMDRIVE%\Users\Default\NTUSER.DAT ECHO Set start with tabs from the the last session reg ADD "HKU\Default\Software\Microsoft\Internet Explorer\ContinuousBrowsing" /v Enabled /t REG_DWORD /d 1 /f ECHO Set always open pop-ups in a new tab reg ADD "HKU\Default\Software\Microsoft\Internet Explorer\TabbedBrowsing" /v PopupsUseNewWindow /t REG_DWORD /d 2 /f ECHO Disable Feedback & Diagnostics reg ADD "HKU\Default\Software\Microsoft\Siuf\Rules" /v NumberOfSIUFInPeriod /t REG_DWORD /d 0 /f ECHO Hide "Task view" Button on Taskbar reg ADD "HKU\Default\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v ShowTaskViewButton /t REG_DWORD /d 0 /f ECHO Turn Off App Suggestions on Start Menu reg ADD "HKU\Default\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v SystemPaneSuggestionsEnabled /t REG_DWORD /d 0 /f ECHO Unload hive of default user reg UNLOAD HKU\Default ECHO. ECHO Done ) :end ECHO. ECHO Setup is completed IF "%interactive%"=="true" (PAUSE) EXIT /B 0 |
Последний раз редактировалось Emulty, 10-12-2016 в 17:00. Отправлено: 16:53, 10-12-2016 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Дорогой друг! Должен Вам сказать — у Вас там чёрт голову сломит.
Определение: SET PathFile=VCredist\vc_redist.x64.exe && IF EXIST %PathRoot%\!PathFile! START /wait %PathRoot%\!PathFile! /q /norestart для точного ограничения определения. Теперь давайте детально по коду: что именно у Вас в последнем коде не работает? Скажем так: «Не работает Раз — это …». Разберёмся с Раз, потом будет Два, Три и т.д. |
Отправлено: 06:20, 11-12-2016 | #4 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Цитата:
А не работает кусок кода с REG'ом, когда его заворачиваю в IF () в несколько строк, например, строка сама по себе работает REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "NETLangPack" /T "REG_SZ" /D "%PathRoot%\NDP46-KB3045557-x86-x64-AllOS-RUS.exe /q /norestart" /F IF /I %major-version% LEQ 6 ( SET PathFile=dotNetFx4\NDP46-KB3045557-x86-x64-AllOS-ENU.exe IF EXIST %PathRoot%\!PathFile! ( START /wait %PathRoot%\!PathFile! /q /norestart REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "NETLangPack" /T "REG_SZ" /D "%PathRoot%\NDP46-KB3045557-x86-x64-AllOS-RUS.exe /q /norestart" /F ECHO %done% ) ) Код прошу поругать, только конструктивно, желательно с примерами как можно и нужно иначе. Буду очень признателен. |
||
Последний раз редактировалось Emulty, 11-12-2016 в 11:48. Отправлено: 11:33, 11-12-2016 | #5 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Уже точно не помню, но кажется !! к переменный добавлял именно в условиях, именно там без данного нюанса не раскрывались переменные правильно. Потому как внутри IF'а я ту же PathFile и переопределял каждый раз. Может быть Вы в силу своего опыта можете предложить более мудрую и универсальную конструкцию?
|
Отправлено: 11:52, 11-12-2016 | #6 |
Старожил Сообщения: 231
|
Профиль | Отправить PM | Цитировать Emulty,
можно использовать вполне нейтральный вариант: IF /I %major-version% LEQ 6 CALL :METKA_6 :: дальнейшее тело скрипта GOTO :EOF :METKA_6 SET PathFile=dotNetFx4\NDP46-KB3045557-x86-x64-AllOS-ENU.exe IF EXIST %PathRoot%\!PathFile! ( START /wait %PathRoot%\!PathFile! /q /norestart REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "NETLangPack" /T "REG_SZ" /D "%PathRoot%\NDP46-KB3045557-x86-x64-AllOS-RUS.exe /q /norestart" /F ECHO %done% ) GOTO :EOF SET "PathFile=dotNetFx4\NDP46-KB3045557-x86-x64-AllOS-ENU.exe" IF EXIST "%PathRoot%\!PathFile!" ( START /wait "%PathRoot%\!PathFile!" /q /norestart REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "NETLangPack" /T "REG_SZ" /D "%PathRoot%\NDP46-KB3045557-x86-x64-AllOS-RUS.exe /q /norestart" /F ECHO %done% ) GOTO :EOF |
------- Отправлено: 22:13, 11-12-2016 | #7 |
Старожил Сообщения: 231
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 22:42, 11-12-2016 | #8 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Большое спасибо всем за помощь! В принципе со всем разобрался, сейчас всё работает.
Низкий поклон. |
Отправлено: 20:50, 14-12-2016 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - экранировать скобки в данных из реестра | kokos76 | Скриптовые языки администрирования Windows | 9 | 11-01-2016 08:21 | |
CMD/BAT - [решено] Сворачивание консольного окна, если в имени запускаемого файла есть скобки | V!RTuE | Скриптовые языки администрирования Windows | 1 | 27-02-2015 19:28 | |
CMD/BAT - [решено] Двойное условие в IF | kelevara | Скриптовые языки администрирования Windows | 10 | 12-05-2013 20:08 | |
Любой язык - [решено] regexp. не закрытые скобки | neprotiv | Скриптовые языки администрирования Windows | 11 | 06-11-2012 05:20 | |
C/C++ - Условие выбора | ShadowMas | Программирование и базы данных | 4 | 22-02-2009 21:42 |
|