windows - 读取批处理文件中有空间的注册表项?

标签 windows batch-file cmd

我想读取其中有空间的注册表项。如果我阅读,如何跳过输出中的 REG_SZ。

我试过了

FOR /F "tokens=*" %%A IN ('%SystemRoot%\system32\REG.exe QUERY "HKLM\SOFTWARE\Wow6432Node\PostgreSQL\Installations\postgresql-9.0" /v "Base Directory"  ^| find /i "REG_SZ"') DO set pghome=%%B
echo %pghome% 
cd /d %pghome%

输出为

C:\Users\test>set pghome=%B
C:\Users\test>echo %B
%B
C:\Users\test>cd /d %B
The system cannot find the path specified.

如何从注册表读取路径并导航到它

最佳答案

如果您正在读取包含 REG_SZ 所需值过滤的行,您将得到一行(抱歉,我没有 postgresql 来测试)

Base Directory    REG_SZ    C:\ProgramFiles\ .....

由于 for/f 命令默认使用空格(和更多字符)作为分隔符,因此您所拥有的一行至少包含 4 个标记:BaseDirectoryREG_SZC:\...,如果值包含空格,则将提供其他 token 。

需要的是第四个及后续标记的所有信息,因此更好的选择是

for /f "tokens=3,*" %%a in ....

这样,%%a 将保存 REG_SZ%%b 该行的其余部分。

关于windows - 读取批处理文件中有空间的注册表项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20470402/

相关文章:

windows - 使用 cmd Windows 7 将键盘命令发送到程序中

python - 如何使用 Python 在 Windows 中获取原始磁盘或 block 设备大小

javascript - 在某些浏览器/设备组合上横向播放视频流

windows - 相当于带引号的 Unix 参数扩展的批处理文件

text - 合并两个unicode文本文件的非空行,使用windows批处理

batch-file - 使用 .bat 文件将字符串添加到注册表

sdk - 为什么命令提示符中的 signtool 返回 "Windows cannot find ' signtool'。请确保您输入的名称正确……”

c++ - 在 Windows 上使用多线程文件 IO 的 SHARING_VIOLATION

Node.js 安装(Windows 安装程序)在 Windows 10 64 位上提前终止

batch-file - findstr 输出到文件中的问题