如果reg键和值存在批处理
问题描述:
如何检查批处理文件中是否存在reg键和值,如果存在,则更改该值。以下是我想用英语做的事情。如果reg键和值存在批处理
HKCU\Software\App
IF "Directory" = "c:\users\%username%\AppData" THEN change to "Directory" = "%userprofile%\AppData" ELSE do nothing
答
见这是否工作:
@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"
)
见reg query /?
和reg add /?
在CMD控制台语法的全部细节。
编辑:限制,只有当它存在并包含特定位置的REG价值的创造需要多一点的逻辑。如果注册表中包含的路径包含尾部反斜杠或内联点或扩展或未扩展,则可能会导致简单的字符串匹配失败。比较路径时,最好将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环境变量的完整列表。
唯一的问题是如果它不存在,它将创建密钥和值。如果它不存在,我需要它不做任何事情。如果该特定键和值存在,我只想更改该值。不过谢谢。任何其他想法? :) – Adam
@Adam请参阅编辑。 – rojo
太棒了!这工作!谢谢@rojo – Adam