[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
Ну а powershell не подходит, потому что часто вырезан бывает. В том же WinPE его не будет.
Хм. Там сразу все от имени админа запускается. По моему, хотя.. всякие извращения могут быть конечно.

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 93
  • Репутация:0

    [+] [-]
dialmak,
Хм. Там сразу все от имени админа запускается. По моему, хотя.. всякие извращения могут быть конечно.
Ну это да. И софт упакованный 7zSFX тоже можно сделать чтобы админа требовал.
Но я все равно почему то захотел чтобы и в cmd проверка была.

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
rockdgon, В любой exe-шник можно добавить манифест, он запустит прогу как хочешь.
https://habrahabr.ru/post/230505/

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 93
  • Репутация:0

    [+] [-]
nikzzzz, Не получилось кстати ab
Переменные не передаются в новое окно. Думаю записывать их в темпфайл, а потом считывать будет уже извращением.
---
Вот, не смог приколхозить так чтобы аргументы в те же аргументы писались. Но смог сделать чтобы в переменные присваивались:
::Сохраняем аргументы в временный файл
if not "%1"=="" (
echo arg1=%1>>%TEMP%\arg.tmp
echo arg2=%2>>%TEMP%\arg.tmp
echo arg3=%3>>%TEMP%\arg.tmp
echo arg4=%4>>%TEMP%\arg.tmp
)
::Элевация прав администратора
>nul 2>&1 reg.exe query "HKU\S-1-5-19" || goto UACPrompt
::Считываем аргументы в переменные
For /F "tokens=1,2,3 delims==" %%a In (%TEMP%\arg.tmp) Do Set %%a=%%b
del /F /Q "%TEMP%\arg.tmp"
Зато работает ab
Как сделать элегантнее и без присвоения переменных я не ослил. Но хотел додумать так, чтобы %1 пишешь в файл и его же возвращаешь.

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
rockdgon, это не будет работать.
Ты пишешь переменные в %TEMP% юзера, а потом читаешь %TEMP% администратора. Это разные папки.

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 93
  • Репутация:0

    [+] [-]
Ander_73, тоже так думал, но внезапно - работает. хотя папка темп должна быть другая. Но если не будет работать можно другой адрес для сохранения использовать.
Я уже над оптимизацией думаю
for %%i in (1 2 3 4 5 6 7 8 9 10) do echo arg%%i=%%i>>%TEMP%\arg.tmp
Как тут arg%%i=%%i экранировать %%i чтобы сработало %%%i?
и
::Считываем аргументы в переменные
For /F "tokens=1,2,3 delims==" %%a In (%TEMP%\arg.tmp) Do Set %%a=%%b
del /F /Q "%TEMP%\arg.tmp"
Возможно ли сделать так чтобы можно было сохранять и передавать значения параметров без использования переменных arg? Тут затык в Do Set %%a=%%b - не знаю как записать чтобы в итоге получалось %1 вместо %%1%

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
rockdgon, это работает пока ты запускаешь бат-ник под админом и запуска скрипта повышения привилегий не происходит.
На, поразбирайся ab
@echo off
If .%1==. call %0 "one one" "two two two" "three"&exit
:: запись переменных
>arg.tmp rem/
for /l %%i in (1,1,9) do >>arg.tmp call echo.%%%%i
:: чтение переменных
set count=0
for /f "delims=" %%i in (arg.tmp) do call :fill %%i
:: вывод на экран переменных
for /l %%i in (1,1,9) do if defined arg%%i call echo arg%%i = %%arg%%i%%
exit
:fill
set /a count+=1
set "arg%count%=%~1"
exit /b

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
48414Возможно ли сделать так чтобы можно было сохранять и передавать значения параметров без использования переменных arg? Тут затык в Do Set %%a=%%b - не знаю как записать чтобы в итоге получалось %1 вместо %%1%
Невозможного нет.
::Сохраняем в файл параметры.
>params.txt echo.%*
::........
::Читаем все параметры из файла
for /f "delims=" %%p in (params.txt) do call :Main %%p
goto :eof
:Main
::Здесь пользуемся %1 %2 и т.д. как родными
goto :eof

Страница 3 из 3


Показать сообщения:    

Текущее время: 28-Мар 21:31

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы