创建一个命令行参数.bat文件,该文件可以更改特定 DirectRoy 中的所有.exe文件兼容性设置



我有多个具有不同目录结构的驱动器。 我有一个名为"测试文件"的目录,其中包含几个.exe文件,我需要将兼容性设置更改为"以管理员身份运行此程序">

是否可以创建一个以管理员身份运行的 Windows .bat 文件,该文件可以更改特定目录及其所有子目录中的所有.exe文件兼容性设置,无论"测试文件"位于何处,以"以管理员身份运行此程序">
这就是我到目前为止所拥有的

for /r "J:test files" %%A in (*.exe) do reg add "HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers" /v "%%~A" /d "RUNASADMIN"

在名为runasadmin.cmd的批处理文件中:

@echo off
for /r "C:test files" %%A in (*.exe) do reg add "HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers" /v "%%~A" /d "RUNASADMIN"

使用C:test files作为示例路径,因为大多数用户将拥有C:驱动器。

在交互式 CMD 提示中:

for /r "C:test files" %A in (*.exe) do reg add "HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers" /v "%~A" /d "RUNASADMIN"

此批处理文件代码将递归exe文件的目录C:test files,并在 Windows 注册表中注册它们以管理员身份运行。交互式 CMD 提示符不需要使用另一个%转义for变量%A,因为该命令的解析次数少于批处理文件的次数。

要创建一个可以接受可变路径的批处理文件,那么这可能是合适的,尽管没有参数检查来验证:

@echo off
for /r %1 %%A in (*.exe) do reg add "HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers" /v "%%~A" /d "RUNASADMIN"

%1是一个命名变量,由第一个脚本参数替换。如果使用%2,它将替换为第二个脚本参数。%0是命令,%1是可用的参数%9

要传递参数,您可以从CMD提示符,快捷方式,Windows注册表以及支持传递参数的任何其他位置执行此操作。

如果将脚本runasadmin.cmd放置在系统 PATH 中,则可以从系统上的任何位置执行。Windows 目录位于系统 PATH 中,因此可以将runasadmin.cmd复制到该位置。在 PATH 中使用runasadmin.cmd,打开文件资源管理器并导航到exe文件的根目录以注册exe文件。在那里,在地址栏中键入cmd。CMD提示符将打开,并将位于文件资源管理器位置的当前目录中。输入runasadmin.cmd或不带扩展名的较短runasadmin。这将运行批处理文件代码并注册当前目录和子目录中的所有exe文件。

如果不需要将脚本放在 PATH 中,请打开文件资源管理器并导航到脚本的根目录。输入路径作为exe文件根目录所在位置的参数。在那里,在地址栏中键入cmd。CMD提示符将打开,并将位于文件资源管理器位置的当前目录中。如果exe文件根目录是C:test files,则输入命令runasadmin "C:test files"。这将运行批处理文件代码,并在C:test files和子目录的目录中注册所有exe文件。任何有效的目录路径都可以作为第一个参数传递。

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 "HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers" /v "%%~A" /d "RUNASADMIN" /f >nul
)
  • 执行检查以确保第一个参数有效。
  • %~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 "HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers" /v "%%~A" /f >nul
) else (
reg add "HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers" /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
  • 第一个参数的值分配给名为root的变量。
  • 第二个参数的值分配给名为undo的变量。
  • 第一个参数是必需的,否则会显示一个提示,要求输入根路径。
  • if not defined root是如果变量名没有值,则使变量名undefined
  • 如果来自提示的输入为空,则会发生|| exit /b 0
  • 在 CMD 提示符下输入runasadmin.cmd /?以获取有关命令行使用的帮助。

建议后面的变体之一,因为它们检查命令行或输入中的错误。最后一个代码是最具特色的。

如果需要有关命令(如reg)的帮助,请在 CMD 提示符下输入reg /?以查看命令的内置帮助。


引用:

  • Windows CMD 命令的 A-Z 索引
  • 操作方法:将命令行参数(参数)传递给 Windows 批处理文件
  • 命令行参数

相关内容

  • 没有找到相关文章

最新更新