如果批处理中存在reg键和值

时间:2017-07-26 15:21:15

标签: batch-file registry

如何检查批处理文件中是否存在reg键和值,如果存在则更改该值。以下是我用英语做的事情。

HKCU\Software\App

IF "Directory" = "c:\users\%username%\AppData" THEN change to "Directory" = "%userprofile%\AppData" ELSE do nothing

1 个答案:

答案 0 :(得分:0)

看看这是否有效:

@echo off & setlocal

reg query HKCU\Software\App /v Directory 2>NUL || (
    reg add HKCU\Software\App /v Directory /t REG_EXPAND_SZ /d "%%userprofile%%\AppData"
)

有关语法的完整详细信息,请参阅cmd控制台中的reg query /?reg add /?

编辑:仅当reg值存在并且包含特定位置时才限制其创建需要更多逻辑。如果注册表中包含的路径包含尾部反斜杠或内联点,或者%username%已展开或未展开,则可能导致简单的字符串匹配失败。比较路径时,最好将cdpushd放入目录,以确保它采用统一格式,所有相关目录都已解析,所有变量都已扩展,尾随斜杠被剥离等。比较使用for循环+ %%~sI或类似的短文件名是另一种选择,但pushd方法还有一个额外好处,即测试目录是否存在且可以访问。

@echo off & setlocal

rem // proceed only if the App key exists in the registry
reg query HKCU\Software\App >NUL 2>NUL && (

    for /f "skip=2 tokens=2*" %%I in (
        'reg query HKCU\Software\App /v Directory 2^>NUL'
    ) do call pushd "%%~J" 2>NUL && (
        rem // call pushd "%%~J" ensures the dir exists and the location is normalized

        setlocal enabledelayedexpansion
        if /i "!CD!"=="C:\Users\%username%\AppData" call :regupdate
        endlocal

        popd

    rem // if pushd failed, the path is invalid.  Update it.
    ) || call :regupdate
)

exit /b

:regupdate
reg add HKCU\Software\App /v Directory /t REG_EXPAND_SZ /d "%%userprofile%%\AppData" /f

另一个注意事项:%appdata%%localappdata%可能比%userprofile%\AppData更受欢迎,具体取决于您在检索后要对其执行的操作。 See this page获取Windows环境变量的完整列表。