只有REG ADD命令循环无休止的批处理文件可能是什么原因?

时间:2015-12-16 08:29:27

标签: batch-file

我的批处理文件test.bat中有以下行,它在Windows注册表中添加了一个条目:

@echo off
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Server" /v DisplayName /t REG_SZ /d Server /f

当我在命令提示符窗口中运行同一行时,该命令正在运行。但是,当我将此行放入批处理文件test.bat并在Windows 7上运行批处理文件时,会导致无限循环。

这种意外批处理文件处理的原因是什么?

1 个答案:

答案 0 :(得分:3)

建议在批处理文件中调用reg之类的应用程序不是Windows命令处理器cmd.exe的内部命令,始终使用完整路径和文件扩展名而不仅仅是文件名。

@echo off
%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Server" /v DisplayName /t REG_SZ /d Server /f

仅使用REG,它取决于当前命令进程的环境变量 PATHEXT 中定义了可执行文件/脚本的文件扩展名,以及在环境变量 PATH中定义了哪些目录当前命令进程。在这种情况下,目录的顺序也很重要。

有关搜索可执行文件的详细信息,请参阅Where is “START” searching for executables?上的答案。但请注意,虽然 start 适用于所有基于Windows NT的Windows命令处理器cmd.exe的内部命令,但命令处理器本身仅使用 PATHEXT PATH 并忽略Windows注册表中的 App Paths 键。在What is the reason for '...' is not recognized as an internal or external command, operable program or batch file?

的答案中更详细地解释了Windows命令解释程序的文件搜索行为

无限循环很可能是由Dennis van Gils已经假设批处理文件reg.bat命名的。因此,命令处理器在当前目录中查找名为REG的可执行文件,该文件reg.bat已经处理过,并继续对该批处理文件进行批处理,并将其他字符串作为参数传递给{{1} }。换句话说,批处理文件在无限循环中一次又一次地启动。

还有一点需要注意:

此处应使用控制台应用程序reg.bat 字符串值添加到注册表配置单元 HKEY_LOCALE_MACHINE 。整个计算机的写入操作需要管理员权限。因此,对于使用此批处理文件的当前用户禁用了用户帐户控制(UAC),或者分别使用以管理员身份运行 Runas来执行此批处理文件。否则,由于缺少权限,reg.exe无法将字符串值添加到注册表中。