【发布时间】:2023-03-22 07:04:01
【问题描述】:
在某些情况下,字符串可以采用不同的值:
foto_20180601_1.jpg
foto_20180601_10.jpg
foto_20180601_100.jpg
foto_20180601_1000.jpg
如果我想获取这些字符串中的最后一位数字 (1, 10, 100, 1000),我可以:
set var=%string:~14% (returns 1.jpg | 10.jpg | 100.jpg | 1000.jpg)
set mystring=%var:.jpg=% (removes '.jpg' and returns the number)
所以我想知道是否有一些改进的方法可以使用findstr 和regex 来获取这些数字。
我试过这样的东西,但无法得到它:
set string=foto_20180601_100.jpg
for %%f in ("%string:\=" "%") do for /f %%n in ('echo %%f^|findstr /b /e /r "*[0-9]*.jpg"') do (
echo %%~n
)
【问题讨论】:
-
如果文件名的结构是规则的,如您的示例,请在下划线处使用
for /f拆分,获取最后一个(第三个)标记。否则,顾名思义,findstr 的(有限)RegEx 功能仅对查找字符串有用。 -
是的,我知道,但我正在尝试调整此处找到的代码 => https://stackoverflow.com/a/19659283/2954267,但无法获得。这就是我寻求帮助的原因。
-
grep适用于 Windows、PowerShell? -
离题 PowerShell:
ls "foto_*_*.jpg"|? Basename -match 'foto_\d{8}_(\d+)'|%{$matches[1]}将仅列出尾随数字 -
为什么要替换字符串中的反斜杠?您的字符串中没有反斜杠!
标签: regex windows batch-file command-line cmd