jCHex
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору С Enterprise проверил - редакция указана там же в реестре. Если я правильно понял необходимую логику скрипта, вот нужный вам результат (заодно чуть оптимизированный, оригинал какой-то сумбурный), в двух вариантах, выбирайте любой: Код: @echo off cd /d "%~dp0" WMIC /NAMESPACE:\\root\CIMV2 PATH SoftwareLicensingProduct WHERE LicenseStatus=1 GET LicenseStatus 2>nul | find "1" >nul || call :loader attrib -r -a -s -h *.* if exist %SystemRoot%\system32\OEM\nul rd /s /q %SystemRoot%\system32\OEM rd /s /q %SystemRoot%\Setup\Scripts del %0 exit :loader reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2>nul | find "Enterprise" >nul && goto :eof "Windows Loader.exe" /silent /preactivate shutdown /r /t 50 | или Код: @echo off cd /d "%~dp0" WMIC /NAMESPACE:\\root\CIMV2 PATH SoftwareLicensingProduct WHERE LicenseStatus=1 GET LicenseStatus 2>nul | find "1" >nul && goto :next reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2>nul | find "Enterprise" >nul && goto :next "Windows Loader.exe" /silent /preactivate shutdown /r /t 50 :next attrib -r -a -s -h *.* if exist %SystemRoot%\system32\OEM\nul rd /s /q %SystemRoot%\system32\OEM rd /s /q %SystemRoot%\Setup\Scripts del %0 exit | Познавательные примечания: перенёс cd в начало - тогда не нужно указывать лишнее в строке запуска лоадера для cd добавил ключ /d - для автоматической смены текущего диска на целевой (%~dp0 возвращает полный путь к батнику, в котором вызывается, без его имени); там же добавил кавычки в "%~dp0" - ибо эта операция не добавляет кавычек для путей, когда они требуются, а я не знаю, откуда запускается ваш скрипт (хотя и предполагаю, что он лежит по короткому пути) 2>nul - чтобы вывод ошибок не смущал (ошибки там, где это добавлено, не мешают работоспособности) findstr тут не нужен - достаточно find || - оператор условной обработки при неудачном выполнении предыдущей команды, используется вместо "IF ERRORLEVEL 1"; && - соотв. наоборот - при удачном call (в первом варианте) - чтобы не повторять одни и те же действия (идут после него) для обоих случаев - пропуск / запуск лоадера, а запустить лоадер (если выполнилось условие) и вернуться к следующей строке перенёс снятие атрибутов после лоадера из блока лоадера в общий блок до удаления файлов: т.к. по батнику не видно полной структуры этого - активатора? тулкита, - то точно неясно, но, предположительно, это снятие атрибутов используется для последующего удаления файлов. В случае, если я не угадал - на общей логике такой перенос никак не скажется. Если угадал - удаление файлов станет всегда отрабатывать правильно. rmdir и rd - одно и то же, заменено на второе кавычки для rd там не нужны - все пути короткие %SystemRoot% и %windir% - (почти) одно и то же, заменено на первое. Подробнее: в NT-линейке вендов родной переменной окружения в этом плане является %SystemRoot%, а для совместимости со старым софтом %windir% сделана линком на первую. Кстати, вследствие этого, первая доступна с самого начала установки NT-системы, тогда как вторая лишь с T-13. goto :eof (в первом варианте) - быстрый переход в конец скрипта - используется для немедленного завершения вызова call и перехода к последующим командам убрано ставшее ненужным указание пути перед именем лоадера exit в конце батника не нужен, НО лишь тогда, когда батник один единственный. Поэтому во втором варианте я его всё равно оставил (в первом завершение происходит всегда в середине скрипта), т.к. - повторюсь - по одному батнику не видно всей структуры вашего тулкита. exit полностью завершает работу интерпретатора команд (cmd), а не только текущего батника - если текущий батник вызван из другого батника с помощью call, тогда это завершит работу обоих, и если в таком варианте exit убрать - первый батник продолжит работу с команды после call. Всё это может использоваться логикой вашего тулкита. Если ваш батник единственный в тулките - можете смело убирать в конце этот exit - но лишь который в конце! В первом варианте он в середине и необходим! if exist %SystemRoot%\system32\OEM заменено на if exist %SystemRoot%\system32\OEM\nul - ибо нам необходимо проверять существование каталога OEM, а не любого файла. Правда, в данном случае это уже из разряда необязательной паранойи =) Добавлено: Цитата: Спасибо, тоже вариант значит. Для его использования в приведённых выше батниках просто заменить им следующий фрагмент: Код: reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2>nul | Добавлено: Если нужно добавить исключение лоадера и для Professional - просто заменяем Код:на Код: findstr "Enterprise Professional" |
| Всего записей: 405 | Зарегистр. 29-07-2004 | Отправлено: 07:08 20-06-2011 | Исправлено: jCHex, 07:19 20-06-2011 |
|