1

Тема: CMD/BAT: Нужно объединить два .bat в один

Не знаю, как объединить эти батники.
При запуске их по отдельности они выполняют то, что в них прописано.
Но когда я попытался вставить один в другой не редактируя (так как не специалист), то часть задания не выполнялась.
Этот .bat создаёт временный .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"

Этот .bat вносит изменения в 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 и в завершении самоудаляется.

2

Re: CMD/BAT: Нужно объединить два .bat в один

Вопрос больше не актуален.