Regex 从批处理文件中的字符串中提取数字

Regex 从批处理文件中的字符串中提取数字,regex,batch-file,Regex,Batch File,从批处理文件中,我想从以下字符串中提取编号653456: C:\Users\testing\AppData\Local\Test\abc123\643456\VSALBT81_COM 数字将发生变化,但始终仅为数字 我目前的理论是搜索符合\alldigits\的内容,然后用空格替换两个\,但我不能完全得到它。这使用了一个名为repl.bat的助手批处理文件,它来自- 假设编号始终为父文件夹(结尾之前的文件夹): 编辑-修改代码示例以更正注释中显示的错误 set d=C:\Users\testi

从批处理文件中,我想从以下字符串中提取编号
653456

C:\Users\testing\AppData\Local\Test\abc123\643456\VSALBT81_COM
数字将发生变化,但始终仅为数字


我目前的理论是搜索符合
\alldigits\
的内容,然后用空格替换两个
\
,但我不能完全得到它。

这使用了一个名为
repl.bat
的助手批处理文件,它来自-


假设编号始终为父文件夹(结尾之前的文件夹):


编辑-修改代码示例以更正注释中显示的错误

set d=C:\Users\testing\AppData\Local\Test\abc123\643456\VSALBT81_COM
for %%f in ("%d:\=" "%") do for /f %%n in ('echo %%f^|findstr /b /e /r "\"[0-9]*\""') do (
    echo %%~n
)

只需在路径前面加一个引号,拆分路径,将每个反斜杠替换为一个引号、一个空格和一个引号,并附加一个引号(因此我们有一个元素列表要迭代),对于每个部分,检查它是否仅由数字构成

到目前为止,您的代码是什么?您应该给出一些不应该匹配的示例,例如
(^.\\)([0-9]*)(\\.$)
使用
\2
提取第二个back引用适用于上述示例,但如果您有多个包含所有数字的文件夹,该怎么办?以下操作将把结果放入一个变量中:
for/f“delims=“%%a in('repl.*\\([0-9]*)\\.\\.'$1”S string')do set“result=%%a”
+1,但空格,
=
,或
可能位于路径名中。最好使用(“%d:\=”“%”
)中%%f的
echo%%~f
将部分用引号括起来,而不是
echo%%f
我放弃了它,只是因为它们不是数字,所以不会返回匹配,但你是对的,部分匹配可能会使它失败。例如,如果\abc123\是\abc 123\,那么您的代码将无法写入。我的修改几乎可以解决这个问题。您的修改不会处理路径内部(&I)。我已经更新了代码来处理它。之所以选择这个答案,而不是其他答案(也都是正确的)——是因为这个答案对我的场景更安全。
@echo off
set "str=C:\Users\testing\AppData\Local\Test\abc123\643456\VSALBT81_COM"
for %%F in ("%str%\..") do set "number=%%~nxF"
@echo off 
setlocal EnableDelayedExpansion
set "string=C:\Users\testing\AppData\Local\Test\abc123\643456\VSALBT81_COM"

for /L %%d in (0,1,9) do set "string=!string:\%%d=\ %%d!"
for /F "tokens=2" %%a in ("%string%") do for /F "delims=\" %%b in ("%%a") do echo Number: [%%b]
set d=C:\Users\testing\AppData\Local\Test\abc123\643456\VSALBT81_COM
for %%f in ("%d:\=" "%") do for /f %%n in ('echo %%f^|findstr /b /e /r "\"[0-9]*\""') do (
    echo %%~n
)