Batch file 如何在批处理脚本的字符串列表中提取每个字符串的特定部分?

Batch file 如何在批处理脚本的字符串列表中提取每个字符串的特定部分?,batch-file,registry,Batch File,Registry,我有一个命令的输出 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" 我需要: 1) 筛选以仅包括TrueType字体 2) 缩短输出以仅包含字体名称(直到“(TrueType)”的所有内容) 有可能做到这一点吗?如果有,如何做到 我已经试过使用 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" | findstr /I

我有一个命令的输出

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" 
我需要:

1) 筛选以仅包括TrueType字体

2) 缩短输出以仅包含字体名称(直到“(TrueType)”的所有内容)

有可能做到这一点吗?如果有,如何做到

我已经试过使用

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" | 
findstr /I /C:"(TrueType)"
并且得到了输出

Arial (TrueType)    REG_SZ    arial.ttf
Arial Black (TrueType)    REG_SZ    ariblk.ttf
Arial Bold (TrueType)    REG_SZ    arialbd.ttf
Arial Bold Italic (TrueType)    REG_SZ    arialbi.ttf
Arial Italic (TrueType)    REG_SZ    ariali.ttf
ect.
但是从那里我不知道如何省略文件名和“REG_SZ”文本。我在post的帮助下尝试将它们全部设置为变量

但同样,这不起作用,因为每台计算机有不同数量的字体,所以没有设定数量的变量来分配。此外,每种字体的文件名中包含不同数量的字符,因此使用

echo %var1:~,-X%
这行不通,相反的也行不通

echo %var1:~,X%
所以最终,我回到了原点

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" | 
findstr /I /C:"(TrueType)"

有什么方法可以实现我需要的结果吗?

您可以使用for循环并使用右括号作为分隔符:

@echo off
setlocal enabledelayedexpansion
for /f "delims=)" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" ^| find /i "TrueType"') do (
   set "str=%%i)"
   echo !str:  =!
)
如果您不想使用
delayedexpansion

@echo off
for /f "delims=)" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" ^| find /i "TrueType"') do (
   set "str=%%i)"
   call echo %%str:  =%%
)

可以使用for循环并使用右括号作为分隔符:

@echo off
setlocal enabledelayedexpansion
for /f "delims=)" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" ^| find /i "TrueType"') do (
   set "str=%%i)"
   echo !str:  =!
)
如果您不想使用
delayedexpansion

@echo off
for /f "delims=)" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" ^| find /i "TrueType"') do (
   set "str=%%i)"
   call echo %%str:  =%%
)

以下是实现预期目标的一种方法:

@(For/F Delims^=(%#In('^”“%uuu AppDir_uuu%reg.exe)查询^
“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts”^|^
“%\uuuu AppDir\uuu%find.exe”/I”(TrueType)“^uuuu AppDir\uuuuu%sort.exe”^”
)Do@For/F标记^=*%%$In(“%%#”)Do@Echo(%%$)&暂停

如果希望以文本文件形式输出,请将
&Pause
更改为
>“TTF.txt”

以下是实现预期目标的一种方法:

@(For/F Delims^=(%#In('^”“%uuu AppDir_uuu%reg.exe)查询^
“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts”^|^
“%\uuuu AppDir\uuu%find.exe”/I”(TrueType)“^uuuu AppDir\uuuuu%sort.exe”^”
)Do@For/F标记^=*%%$In(“%%#”)Do@Echo(%%$)&暂停
如果您希望在文本文件中输出,请将
&Pause
更改为
>“TTF.txt”