|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужно объединить два батника в один |
|
CMD/BAT - [решено] Нужно объединить два батника в один
|
Старожил Сообщения: 176 |
Не знаю, как объединить эти батники.
При запуске их по отдельности они работают. Но когда попытался вставить один в другой не редактируя, то часть задания не выполнялась. Этот создаёт временный .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 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Не лучшая практика запускать батник самим собой и и заставлять его удалять себя собой же. Это значит раз.
И еще этот батник (или батники?) здорово смахивает на нарушающий пункт 3.18 правил. Это значит два. |
Отправлено: 08:58, 12-07-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 176
|
Профиль | Отправить PM | Цитировать Цитата Elven:
Цитата Elven:
Перемещение файла настроек программы prefs.xml в папку в которой они и должны находиться? Внесение изменений в hosts? Если объединить эти файлы невозможно, то скажите почему? Я в этом не разбираюсь, а если просто скопировать код из одного в другой, то происходит циклический запуск-остановка .cmd окна, при запуске его из Program Files. Если запускать его с Рабочего стола, то он запускается нормально. |
||
Последний раз редактировалось BKPB, 12-07-2019 в 10:57. Отправлено: 09:48, 12-07-2019 | #3 |
Старожил Сообщения: 176
|
Профиль | Отправить 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Графика - [решено] Чем объединить два файла в один? | 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 |
|