Windows 8 Regedit 要求传入注册表文件的绝对路径

Windows 8 Regedit 要求传入注册表文件的绝对路径

我正在为我们的自动构建/测试系统构建一组批处理脚本,该系统可在不同的操作系统上运行,为不同的环境设置一些条件,我注意到 Windows 8 处理 regedit.exe 命令行参数的方式似乎与 Windows XP 到 7 不同。

我正在运行以下命令:

regedit.exe /s relative_path\registry_settings.reg

在我们到达 Windows 8 节点之前,它一直正常工作,此时它没有发出任何错误,而是继续运行,就好像它在没有进行任何注册表更改的情况下正常工作一样。(然后我的整个测试套件都失败了,吓到我了)

为了让 Windows 8 正常工作,我必须使用绝对路径,如下所示:

regedit.exe /s \absolute_path\registry_settings.reg

这是微软的故意改变吗?还是可能是环境设置影响了这一点?有没有比使用绝对路径更好的解决方案(绝对路径很脆弱,需要更多的未来维护)?

答案1

在批处理脚本中,您可以使用 来%~dp0表示包含正在运行的批处理脚本的目录。因此,如果您在以下位置有文件:

C:\scripts\script.bat
C:\scripts\relative_path\registry_settings.reg

你可以这样写script.bat

regedit.exe /s "%~dp0relative_path\registry_settings.reg"

并获得相对路径的所有好处,并且仍然可以在 Windows 8 上运行。

相关内容