使用 findstr 命令获取字符串的结尾

Get the end of a string using findstr command

由于 Windows 上没有本机 grep,我正在努力获取位于一行末尾的子字符串的末尾,该行前面有一些空格。

我的搜索字符串总是具有以下模式:

Some description about something: the-value-I-want-separated-by-hyphens

(描述和值之间有5个空格)

使用 Regex 我可以做到:[^ ]+$ 其中 returns:the-value-I-want-separated-by-hyphens(参见此处:https://regex101.com/r/zgTGWA/1

但这在我的 cmd 中不起作用。

上下文

我有一堆文件,看起来像这样:

file.txt

Description Key1:     the-value-I-want-separated-by-hyphens
Another Description Key2:     another-value
Another Description Key3:     another-value

我在cmd中的测试代码: type file.txt | findstr "Key1" | findstr /R /C"[^ ]+$"

虽然第一个查找字符串非常适合过滤所需的行,但第二个查找字符串没有 return 所需的值。

感谢任何建议

您可以使用通配符子串替换来删除该行的前导部分。通配符替换是非贪婪的,因此它只会删除找到第一组 5 个空格的部分。我也用冒号来加强匹配。

@echo off

FOR /F "delims=" %%G IN ('type file.txt ^| findstr "Key1:"') DO (
    set "line=%%G"
    setlocal enabledelayedexpansion
    echo !line:*:     =!
    FOR /F "delims=" %%H IN ("!line:*:     =!") DO endlocal&set "result=%%H"
)
echo Result=%result%
pause

根据您的输入文件,这就是结果。

C:\BatchFiles\substring>so.bat
the-value-I-want-separated-by-hyphens
Result=the-value-I-want-separated-by-hyphens
Press any key to continue . . .