В пакетном файле с именем runasadmin.cmd
:
@echo off
for /r "C:\test files\" %%A in (*.exe) do reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%%~A" /d "RUNASADMIN"
Использование C:\test files\
в качестве примера пути, поскольку большинство пользователей будет иметь диск C:
.
В интерактивной подсказке CMD:
for /r "C:\test files\" %A in (*.exe) do reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~A" /d "RUNASADMIN"
Этот код пакетного файла найдет каталог C:\test files\
для файлов exe
и зарегистрирует их в реестре Windows для запуска в качестве администратора. Для интерактивной подсказки CMD не требуется экранировать переменную for
%A
с помощью другой %
, поскольку команда анализируется меньше раз, чем пакетный файл.
Чтобы создать пакетный файл, который может примите путь переменной, тогда это может быть подходящим, хотя не имеет проверки аргумента для проверки:
@echo off
for /r %1 %%A in (*.exe) do reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%%~A" /d "RUNASADMIN"
%1
является именованной переменной, которая заменяется 1-м аргументом сценария. Если бы использовалось %2
, оно было бы заменено вторым аргументом сценария. %0
- это команда, а %1
- %9
- доступные аргументы.
Чтобы передать аргументы, вы можете сделать это из приглашения CMD, из ярлыка, из реестра Windows и из любого другого места, где поддерживается передача аргументов.
Сценарий runasadmin.cmd
может быть выполнен из любой точки системы, если он помещен в системный PATH. Каталог Windows находится в системном PATH, поэтому можно скопировать runasadmin.cmd
в это место. С runasadmin.cmd
в PATH откройте проводник и перейдите в каталог root файлов exe
, чтобы зарегистрировать файлы exe
. Оказавшись там, введите cmd
в адресную строку. Подсказка CMD откроется и будет в текущем каталоге расположения Проводника. Введите runasadmin.cmd
или короче runasadmin
без расширения. Это запустит код пакетного файла и зарегистрирует все файлы exe
в текущем каталоге и подкаталогах.
Если размещение сценария в PATH нежелательно, откройте проводник и перейдите в каталог root. сценария. Введите путь в качестве аргумента того, где находится каталог root файлов exe
. Оказавшись там, введите cmd
в адресную строку. Подсказка CMD откроется и будет в текущем каталоге расположения Проводника. Если каталог exe
files root имеет значение C:\test files\
, введите команду runasadmin "C:\test files\"
. Это запустит код пакетного файла и зарегистрирует все файлы exe
в каталоге C:\test files\
и его подкаталогах. Любой действительный путь к каталогу может быть передан в качестве 1-го аргумента.
Некоторые варианты runasadmin.cmd
:
@echo off
rem Ensure 1st argument is valid.
if not "%~1" == "" (
if not exist "%~1" (
>&2 echo Require a valid directory path as the 1st argument.
exit /b 1
)
)
rem Register the exe files.
for /r %1 %%A in (*.exe) do (
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%%~A" /d "RUNASADMIN" /f >nul
)
- Проверка выполняется, чтобы убедиться, что 1-й аргумент действителен.
%~1
равно %1
с удалением окружающих двойных кавычек. >&2 echo
выводит следующий текст сообщения об ошибке в поток stderr. - Если происходит
exit /b 1
, переменная errorlevel
может быть проверена, если ее значение равно 1
. /f >nul
принудительно добавляет в реестр, и сообщение об успешном завершении перенаправляется на nul
, что заставляет сообщение об успешном завершении работы замолчать. Сообщения об ошибках не отключаются.
@echo off
setlocal
@rem Display help message.
@if "%~1" == "/?" goto :help
@if "%~1" == "-h" goto :help
rem Assign all arguments to allargs.
set allargs=%*
rem Assign value of 1st argument to variable named root.
set "root=%~1"
rem Assign value of 2nd argument to variable named undo.
set "undo=%~2"
rem Enter a root path if no argument passed.
if not defined root set /p "root=Enter root path of exe files: " || exit /b 0
rem Remove any double quotes.
set "root=%root:"=%"
rem Ensure 1st argument is valid.
if not exist "%root%" (
>&2 echo Require a valid directory path as the 1st argument.
exit /b 1
)
rem Enter y or n to undo registration.
if defined undo (
if "%undo%" == "1" set "undo=y"
) else if not defined allargs (
set /p "undo=Undo registration [n|y]: "
)
if /i not "%undo%" == "y" set "undo="
rem Register the exe files.
for /r "%root%" %%A in (*.exe) do (
echo ENTRY: "%%~A"
if defined undo (
reg delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%%~A" /f >nul
) else (
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%%~A" /d "RUNASADMIN" /f >nul
)
)
exit /b 0
:help
echo Syntax: "%~nx0" [root [undo]]
echo:
echo Examples:
echo To register exe files in "C:\test files\".
echo "%~nx0" "C:\test files\"
echo:
echo To undo register of exe files in "C:\test files\".
echo "%~nx0" "C:\test files\" 1
echo:
echo 1st arg is root directory to search recursively.
echo 2nd arg set to 1 to undo registration.
echo:
echo No args will display prompt for root directory and if to undo.
exit /b 0
setlocal
для сохранения переменных set
в сценарии как локальных для сценария. - Значение всех аргументов равно присваивается переменной с именем
allargs
для последующей проверки, определено ли allargs
. - Значение 1-го аргумента присваивается переменной с именем
root
. - Значение 2-го аргумента присваивается переменной named
undo
. - 1-й аргумент обязателен, в противном случае отображается запрос, запрашивающий путь root.
if not defined root
, если имя переменной не имеет значения, которое делает имя переменной undefined
. || exit /b 0
происходит, если ввод из приглашения пуст. - Введите
runasadmin.cmd /?
в CMD Запрос на помощь по использованию командной строки.
Предложите один из более поздних вариантов, поскольку они проверяют ошибки в командной строке или вводе. Последний код является наиболее функциональным.
, если нужна помощь с такой командой, как reg
, введите reg /?
в приглашении CMD, чтобы просмотреть встроенную справку по команде.
Ссылки: