正则表达式,在"某个字符串"之前搜索字符串。

时间:2017-04-04 14:01:11

标签: regex batch-file

我试图在批处理文件中运行正则表达式,该文件将在文本文件中搜索字符串。但是,我的字符串的唯一唯一标识符位于字符串之后,但位于同一行。

我在文件中搜索项目的注册表项。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{RegistryKey}   DisplayName    REG_SZ    Node.js

唯一唯一的字符串是Node.js部分,因此我需要使用regedit在RegistryKey文本之前查找DisplayName REG_SZ Node.js。如果有人对此有任何建议,那将会有所帮助。

目前使用

选择字符串I' m
/(\{.*\})(\n\s*.)(DisplayName    REG_SZ    Node.js)

我可以选择字符串。有没有办法批量访问捕获组1?这样我可以拥有我需要的registryKey吗?

通过请求编辑:

批量我正在尝试这样的事情

@ECHO off 
::reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{6BA2207A-7E42-434C-8DD4-A2FFC1D9EA68}" > nul
REG Query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ /V "DisplayName" /S >> testSearch.txt
::type "testName"
for /F "tokens=*" %%A in (testSearch.txt) do echo %%A
findstr /r /x "/(\{.*\})(\n\s*.)(DisplayName    REG_SZ    Node.js)" testSearch.txt >> saveLine.txt
pause

我现在的问题是我只想保存控制组1(作为{registryKey}) 我想我可以使用保存的文本文件并在javascript中解析它只返回注册表项,我已经使用了大量的Javascript和批处理通过节点交织。

1 个答案:

答案 0 :(得分:0)

解析字符串的batch方式是for循环。要提取字符串的一部分(或某些部分),请使用适当的标记和分隔符。要在文本文件中找到正确的行,请使用findfindstr

@echo off
setlocal 
for /f "tokens=1-3 delims={}" %%a in ('type b.txt^|find "DisplayName    REG_SZ    Node.js"') do (
  echo %%a
  echo %%b
  echo %%c
)

如果我理解正确,您只需要第一个令牌%%a