如何使用批处理脚本从注册表中获取带有空格的完整值名称?

问题描述 投票:0回答:1

我在注册表中有一些条目。例如:

ValueName          ValueData
a b c.exe            True
abc.exe              False
etc.

我的试用:

@echo off 
set key=path to reg. key
for /f "tokens=1,3" %%a in ('reg query "%key%" /v "*.exe"') do (
echo Value Name: %%a
echo Value Data: %%b
)
pause

使用上面的代码,由于空格,我没有得到所需的输出:

Value Name: a
Value Data: REG_SZ
Value Name: abc.exe
Value Data: False

输出应该是带有空格的完整值名称或任何符号和值数据,如下例所示:

Value Name: a b c.exe
Value Data: True
Value Name: abc.exe
Value Data: False

如上面的示例,我们在注册表中也有包含空格的值名称。因此,使用我的踪迹,我无法使用批处理文件脚本获得所需的输出。

有人有什么想法吗?

batch-file
1个回答
0
投票
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following settings for the directories and filenames are names
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These are required only for the demonstration

SET "sourcedir=u:\your files"
SET "filename1=%sourcedir%\q76951819.txt"

ECHO method 1
FOR /f "usebackqskip=1delims=" %%e IN ("%filename1%") DO (
 SET "line=%%e"
 SET "name=!line:~0,21!"
 CALL :trim name
 ECHO Value name : !name!
 ECHO Value data : !line:~21!
)

ECHO method 2
FOR /f "usebackqskip=1delims=" %%e IN ("%filename1%") DO (
 SET "line=%%e"
 SET "data=!line:*  =!"
 CALL SET "line=%%line:  !data!=%%"
 CALL :trim line
 CALL :trim data
 ECHO Value name : !line!
 ECHO Value data : !data!
)

GOTO :EOF

:: remove leading and trailing spaces from variable %1

:trim
IF "!%1!"=="" GOTO :eof
IF "!%1:~-1!"==" " SET "%1=!%1:~0,-1!"&GOTO trim
IF "!%1:~0,1!"==" " SET "%1=!%1:~1!"&GOTO trim
GOTO :eof

备注:
我使用了包含您发布的示例数据的文件来进行演示。线路

FOR /f "usebackqskip=1delims=" %%e IN ("%filename1%") DO (

应替换为

FOR /f "skip=1delims=" %%e IN ('reg query "%key%" /v "*.exe"') DO (

直接处理

reg query
命令。

第一种方法中,键值为

21
。由于您发布的数据的第二列从第 20 列和第 22 列开始,因此
21
可能需要调整。只需将所需的行分配给变量
line
并将
line
拆分为前 21 个字符和其余字符。修剪结果并显示。

在第二个中,将前2个连续空格之后的部分分配给

data
,将前2个连续空格之前的部分分配给
line
,修剪并显示。

trim
子例程只是检测第一个或最后一个字符是否是空格,将其删除,冲洗并重复。

注意主程序和子程序都依赖

delayedexpansion

© www.soinside.com 2019 - 2024. All rights reserved.