Windows批处理文件从文件名中提取编号

Windows批处理文件从文件名中提取编号,windows,batch-file,Windows,Batch File,我已在Win7批处理文件中为编写了一个循环,该循环在指定文件夹中的每个文件中运行: for /f %%f in ('dir /b C:\some_folder') do ( echo %%f ) 这些文件的格式为abc_123_1234567.txt。如何从文件名中提取最后一组数字(即,1234567),并将其放入变量中 您可以使用-JScript/batch混合工具很好地解决这个问题,该工具通过对文件名执行正则表达式搜索和替换来重命名文件。是纯脚本,从XP开始将在任何Windows

我已在Win7批处理文件中为编写了一个循环,该循环在指定文件夹中的每个文件中运行:

for /f %%f in ('dir /b C:\some_folder') do ( 
    echo %%f
)

这些文件的格式为
abc_123_1234567.txt
。如何从文件名中提取最后一组数字(即,
1234567
),并将其放入变量中

您可以使用-JScript/batch混合工具很好地解决这个问题,该工具通过对文件名执行正则表达式搜索和替换来重命名文件。是纯脚本,从XP开始将在任何Windows计算机上本机运行

我使用了
/T
测试选项,因此它只列出原始文件和新名称,而不实际进行重命名。然后我使用FOR/F解析结果,以获得原始名称和提取的数字。将分隔符设置为引号需要一些晦涩难懂的语法

@echo off
for /f tokens^=1^,3^ delims^=^" %%A in (
  'jren ".*_\d+_(\d+)\.[^.]*$" "$1" /t /p "C:\some_folder"'
) do (
  echo File=%%A  Number=%%B
)

假设只有一个文件与您提供的格式匹配

请查看链接。假设有多个文件与该模式匹配。你要哪个号码?这个循环总是STRIGIGSTRIGGIN StrugYouWay.Ext?for for循环将依次运行每个文件,因此只有一个文件需要从中提取数字。我已经将<代码> $>代码>添加到搜索项中,以使解决方案更加精确。
for /f "tokens=3delims=_." %%f in ('dir /b C:\some_folder\*') do ( 
    set /a filenum=%%f
    echo %%f
)
echo filenum is %filenum%