如何检查批处理文件中是否存在reg键和值,如果存在则更改该值。以下是我用英语做的事情。
HKCU\Software\App
IF "Directory" = "c:\users\%username%\AppData"
THEN change to "Directory" = "%userprofile%\AppData"
ELSE do nothing
答案 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%
已展开或未展开,则可能导致简单的字符串匹配失败。比较路径时,最好将cd
或pushd
放入目录,以确保它采用统一格式,所有相关目录都已解析,所有变量都已扩展,尾随斜杠被剥离等。比较使用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环境变量的完整列表。