Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужно объединить два батника в один

Ответить
Настройки темы
CMD/BAT - [решено] Нужно объединить два батника в один

Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


Не знаю, как объединить эти батники.
При запуске их по отдельности они работают.
Но когда попытался вставить один в другой не редактируя, то часть задания не выполнялась.
Этот создаёт временный .vbs, который запускает этот же батник от имени Администратора,
а вторая часть этого батника перемещает файл настроек prefs.xml в нужную папку и самоудаляется после выполнения:

Скрытый текст
@Echo Off
ver |>NUL find /v "5." && if "%~1"=="" (
Echo CreateObject^("Shell.Application"^).ShellExecute WScript.Arguments^(0^),"1","","runas",1 >"%~dp0Elevating.vbs"
cscript.exe //nologo "%~dp0Elevating.vbs" "%~f0"& goto :eof
)


if not exist "%AppData%\Geek Uninstaller\*.*" (md "%AppData%\Geek Uninstaller")
move "prefs.xml" "%AppData%\Geek Uninstaller\prefs.xml"
del /f /q "%systemdrive%\Program Files\Geek Uninstaller\Elevating.vbs"
del "%~f0"

Этот вносит внесения изменений в hosts:
Скрытый текст
@Echo Off
cls
Set "File=hosts."
Set "Folder=%windir%\system32\drivers\etc"

Pushd "%Folder%"||(Pause &Exit /B 2)

Set "@Add001=127.0.0.1 geekuninstaller.com"

Attrib -R -S -H "%File%"

Set /A NOld=1000
FOR /F "usebackq delims=" %%s IN ("%File%") DO (Set /A NOld+=1 &Call Set "@Old%%NOld%%=%%s")
FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul Set "@Add"`) DO (Set /A NOld+=1 &Call Set "@Old%%NOld%%=%%j")
FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul Set "@Old"`) DO (Set "SS=%%j" &Call Set "@%%i=%%SS: =%%")

>"%File%" (FOR /L %%i IN (1001,1,%NOld%) DO Call :Anal %%i)
attrib +R "%File%"
Popd
GoTo :Eof

:Anal
Call Set "A=%%@@Old%1%%"
If /I "%A%"=="" Exit /B 1
If "%A:~0,1%"=="#" (Call Echo %%@Old%1%%&Exit /B 0)
(Call Echo %%@Old%1%%)
FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul Set "@@Old"`) DO If /I "%%j"=="%A%" Call Set "%%i="
Exit /B 0

В итоге должно получиться вот,что.
Батник запускает сам себя от имени администратора,
далее перемещает файл в нужную папку,
далее вносит изменения в hosts и в завершении самоудаляется.

Отправлено: 16:36, 11-07-2019

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Не лучшая практика запускать батник самим собой и и заставлять его удалять себя собой же. Это значит раз.
И еще этот батник (или батники?) здорово смахивает на нарушающий пункт 3.18 правил. Это значит два.

Отправлено: 08:58, 12-07-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата Elven:
Не лучшая практика запускать батник самим собой и и заставлять его удалять себя собой же. Это значит раз. »
Запуск батника самим себя с помощью .vbs описан на многих форумах "Запуск скрипта с повышенными привилегиями [руководство]", и сколько я им пользовался проблем не было, может они и бывают не знаю, но в моей ситуации другого способа запустить .bat скрыто и от Админа я не нашёл. А уж удалять самого себя, так этих вариантов вообще много и разных.
Цитата Elven:
И еще этот батник (или батники?) здорово смахивает на нарушающий пункт 3.18 правил. Это значит два. »
Не знаю, что вы конкретно имели ввиду.
Перемещение файла настроек программы prefs.xml в папку в которой они и должны находиться?
Внесение изменений в hosts?

Если объединить эти файлы невозможно, то скажите почему?
Я в этом не разбираюсь, а если просто скопировать код из одного в другой, то происходит циклический запуск-остановка .cmd окна, при запуске его из Program Files. Если запускать его с Рабочего стола, то он запускается нормально.

Последний раз редактировалось BKPB, 12-07-2019 в 10:57.


Отправлено: 09:48, 12-07-2019 | #3


Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


Тема закрыта.
Решил задачу сам.
Если кому будет интересно, вот что получилось:
Скрытый текст
Код: Выделить весь код
@Echo Off
:: Создаём временный файл скрипта .vbs, который запустит батник от имени Администратора
ver |>NUL find /v "5." && if "%~1"=="" (
  Echo CreateObject^("Shell.Application"^).ShellExecute WScript.Arguments^(0^),"1","","runas",1 >"%~dp0Elevating.vbs"
  cscript.exe //nologo "%~dp0Elevating.vbs" "%~f0"& goto :eof
)
 
 
:: Перемещаем файл настроек в папку с настройками программы
if not exist "%AppData%\Geek Uninstaller\*.*" (md "%AppData%\Geek Uninstaller")
move "prefs.xml" "%AppData%\Geek Uninstaller\prefs.xml"
:: Удаляем временный скрипт .vbs
del /f /q "%systemdrive%\Program Files\Geek Uninstaller\Elevating.vbs"

:: Вносим изменения в hosts
cls
	Set "File=hosts."
	Set "Folder=%windir%\system32\drivers\etc"

	Pushd "%Folder%"||(Pause &Exit /B 2)

	Set "@Add001=127.0.0.1 geekuninstaller.com"

	Attrib -R -S -H "%File%"
	
	Set /A NOld=1000
	FOR /F "usebackq delims=" %%s IN ("%File%") DO (Set /A NOld+=1 &Call Set "@Old%%NOld%%=%%s")
	FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul Set "@Add"`) DO (Set /A NOld+=1 &Call Set "@Old%%NOld%%=%%j")
	FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul Set "@Old"`) DO (Set "SS=%%j" &Call Set "@%%i=%%SS: =%%")

	>"%File%" (FOR /L %%i IN (1001,1,%NOld%) DO Call :Anal %%i)
        attrib +R "%File%"
	Popd
GoTo :Eof

:Anal
	Call Set "A=%%@@Old%1%%"
	If /I "%A%"=="" Exit /B 1
	If "%A:~0,1%"=="#" (Call Echo %%@Old%1%%&Exit /B 0)
	(Call Echo %%@Old%1%%)
	FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul Set "@@Old"`) DO If /I "%%j"=="%A%" Call Set "%%i="
:: Батник сам себя удаляет
del "%~f0"

Батник создавался для запуска в папке Program Files, по команде Setup из SFX инсталлятора WinRar.

Отправлено: 13:08, 12-07-2019 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужно объединить два батника в один

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Графика - [решено] Чем объединить два файла в один? Peter15 Программное обеспечение Windows 12 13-02-2022 09:13
7 / 2008 R2 - объединить два wim фаила в один YURSA Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 26 26-01-2013 23:45
FreeBSD - объединить два интернет канала в один VictorSh Общий по FreeBSD 8 29-12-2011 18:14
Как объединить два скрипта в один Fantasy22 AutoIt 1 04-12-2009 12:32
Proxy/NAT - Возможно ли объединить два Proxy в один канал? Borevlad Сетевые технологии 7 09-07-2008 11:30




 
Переход