我正在为我们的自动构建/测试系统构建一组批处理脚本,该系统可在不同的操作系统上运行,为不同的环境设置一些条件,我注意到 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 上运行。